Stop stripping the size prefix off

This turns out to be super dangerous to do.  A flatbuffer is aligned
assuming that the size is either there or not there.  By removing it,
you break alignment.

This necesitates having 2 subclasses of Flatbuffer.  A SizePrefixed
version and a non size prefixed version.  That lets us distinguish for
methods which care.

Once all that's done, deal with the fallout through the code base,
including logfile_utils and the chaos that causes rippling out.

Change-Id: I91b7be355279a1c19e5c956c33359df01a17eacf
diff --git a/aos/events/logging/logger.cc b/aos/events/logging/logger.cc
index 977a82f..b32c748 100644
--- a/aos/events/logging/logger.cc
+++ b/aos/events/logging/logger.cc
@@ -37,11 +37,11 @@
 namespace logger {
 namespace {
 // Helper to safely read a header, or CHECK.
-FlatbufferVector<LogFileHeader> MaybeReadHeaderOrDie(
+SizePrefixedFlatbufferVector<LogFileHeader> MaybeReadHeaderOrDie(
     const std::vector<std::vector<std::string>> &filenames) {
   CHECK_GE(filenames.size(), 1u) << ": Empty filenames list";
   CHECK_GE(filenames[0].size(), 1u) << ": Empty filenames list";
-  std::optional<FlatbufferVector<LogFileHeader>> result =
+  std::optional<SizePrefixedFlatbufferVector<LogFileHeader>> result =
       ReadHeader(filenames[0][0]);
   CHECK(result);
   return result.value();
@@ -1285,8 +1285,8 @@
     }
     TimestampMerger::DeliveryTimestamp channel_timestamp;
     int channel_index;
-    FlatbufferVector<MessageHeader> channel_data =
-        FlatbufferVector<MessageHeader>::Empty();
+    SizePrefixedFlatbufferVector<MessageHeader> channel_data =
+        SizePrefixedFlatbufferVector<MessageHeader>::Empty();
 
     if (VLOG_IS_ON(1)) {
       LogFit("Offset was");
@@ -1900,12 +1900,12 @@
 }
 
 std::tuple<TimestampMerger::DeliveryTimestamp, int,
-           FlatbufferVector<MessageHeader>>
+           SizePrefixedFlatbufferVector<MessageHeader>>
 LogReader::State::PopOldest(bool *update_time) {
   CHECK_GT(sorted_messages_.size(), 0u);
 
   std::tuple<TimestampMerger::DeliveryTimestamp, int,
-             FlatbufferVector<MessageHeader>,
+             SizePrefixedFlatbufferVector<MessageHeader>,
              message_bridge::NoncausalOffsetEstimator *>
       result = std::move(sorted_messages_.front());
   VLOG(2) << MaybeNodeName(event_loop_->node()) << "PopOldest Popping "
@@ -1955,8 +1955,8 @@
 
     TimestampMerger::DeliveryTimestamp channel_timestamp;
     int channel_index;
-    FlatbufferVector<MessageHeader> channel_data =
-        FlatbufferVector<MessageHeader>::Empty();
+    SizePrefixedFlatbufferVector<MessageHeader> channel_data =
+        SizePrefixedFlatbufferVector<MessageHeader>::Empty();
 
     message_bridge::NoncausalOffsetEstimator *filter = nullptr;