Emit XOR ops at OTA generation time

1. Add a new merge operation type: COW_XOR
2. When running bsdiff, extract similar blocks and record them in
annotated operations
3. During merge sequence generation, include COW_XOR ops as well

Test: treehugger
Bug: 177104308

Change-Id: If894736859b572e761e83be5a9498235caa68866
diff --git a/payload_generator/annotated_operation.h b/payload_generator/annotated_operation.h
index 653bab0..c57f249 100644
--- a/payload_generator/annotated_operation.h
+++ b/payload_generator/annotated_operation.h
@@ -19,6 +19,7 @@
 
 #include <ostream>  // NOLINT(readability/streams)
 #include <string>
+#include <vector>
 
 #include <brillo/secure_blob.h>
 
@@ -35,6 +36,11 @@
   // The InstallOperation, as defined by the protobuf.
   InstallOperation op;
 
+  // Array of blocks which should be converted to XOR during OTA install.
+  // All elements in this array should have |merge_op.type() == COW_XOR|.
+  // This information is typically derived from BSDIFF patch data.
+  std::vector<CowMergeOperation> xor_ops;
+
   // Writes |blob| to the end of |blob_file|. It sets the data_offset and
   // data_length in AnnotatedOperation to match the offset and size of |blob|
   // in |blob_file|.