Move log file manipulation logic out of LogReader

It really had 4 separate layers that should each have been a class.
Split them out in perparation for multi-file file logs.

1) Read chunks of data from a file
2) Read the header and messages from a file.
3) Sort those messages
4) And then send them over the event loop.

Change-Id: Ib885e6f0ed027851a4d7faea71b9391c1b60cf19
diff --git a/aos/flatbuffers.h b/aos/flatbuffers.h
index 630741f..4e4520c 100644
--- a/aos/flatbuffers.h
+++ b/aos/flatbuffers.h
@@ -171,6 +171,11 @@
     return *this;
   }
 
+  // Constructs an empty flatbuffer of type T.
+  static FlatbufferVector<T> Empty() {
+    return FlatbufferVector<T>(std::vector<uint8_t>{});
+  }
+
   virtual ~FlatbufferVector() override {}
 
   const uint8_t *data() const override { return data_.data(); }