update_engine: Add ExtentReader

Currently Each operation in DeltaPerformer has the responsibility of
reading from the source device by itself. Adding an
ExtentReader (similar to ExtentWriter) aggregates all these
responsibilities on DeltaPerformer.source_fd_. This simplifies the
design as each operation does not need to invent is own open/read/close
etc. This specially will be used in conjunction with bspatch and puffin.

BUG=chromium:761138
TEST=FEATURES="test" emerge-amd64-generic update_engine;

Change-Id: I2c7a21a02bd1df06bbaa7ebf374a13f654768721
Reviewed-on: https://chromium-review.googlesource.com/651336
Commit-Ready: Amin Hassani <ahassani@chromium.org>
Tested-by: Amin Hassani <ahassani@chromium.org>
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
Reviewed-by: Sen Jiang <senj@chromium.org>
diff --git a/update_engine.gyp b/update_engine.gyp
index 7a1ad95..41ee1e8 100644
--- a/update_engine.gyp
+++ b/update_engine.gyp
@@ -187,6 +187,7 @@
         'payload_consumer/bzip_extent_writer.cc',
         'payload_consumer/delta_performer.cc',
         'payload_consumer/download_action.cc',
+        'payload_consumer/extent_reader.cc',
         'payload_consumer/extent_writer.cc',
         'payload_consumer/file_descriptor.cc',
         'payload_consumer/file_descriptor_utils.cc',
@@ -532,6 +533,7 @@
             'payload_consumer/delta_performer_integration_test.cc',
             'payload_consumer/delta_performer_unittest.cc',
             'payload_consumer/download_action_unittest.cc',
+            'payload_consumer/extent_reader_unittest.cc',
             'payload_consumer/extent_writer_unittest.cc',
             'payload_consumer/fake_file_descriptor.cc',
             'payload_consumer/file_descriptor_utils_unittest.cc',