update_engine: Implement SOURCE_COPY/SOURCE_BSDIFF operations.

Implement SOURCE_COPY and SOURCE_BSDIFF in DeltaPerformer. These new
operations are the same as MOVE and BSDIFF, respectively, except
that they read from the source partition rather than the destination
partition.

Also fills in the source paths in omaha_response_handler_action, which
were previously not being set.

BUG=chromium:461632
TEST=`FEATURES=test emerge-link update_engine` and manual testing.

Change-Id: I81eba5780c73ed920a5db72702d9d7c67dbaa673
Reviewed-on: https://chromium-review.googlesource.com/263747
Reviewed-by: Allie Wood <alliewood@chromium.org>
Commit-Queue: Allie Wood <alliewood@chromium.org>
Trybot-Ready: Allie Wood <alliewood@chromium.org>
Tested-by: Allie Wood <alliewood@chromium.org>
diff --git a/update_metadata.proto b/update_metadata.proto
index f99c912..bf0cb45 100644
--- a/update_metadata.proto
+++ b/update_metadata.proto
@@ -133,11 +133,12 @@
     // Byte length of src, equal to the number of blocks in src_extents *
     // block_size. It is used for BSDIFF, because we need to pass that
     // external program the number of bytes to read from the blocks we pass it.
+    // This is not used in any other operation.
     optional uint64 src_length = 5;
 
     repeated Extent dst_extents = 6;
     // Byte length of dst, equal to the number of blocks in dst_extents *
-    // block_size. Used for BSDIFF.
+    // block_size. Used for BSDIFF, but not in any other operation.
     optional uint64 dst_length = 7;
 
     // Optional SHA 256 hash of the blob associated with this operation.