Rename Location to Channel and add extra Flatbuffer helpers

This now follows the convention in the design doc and is more closely
aligned to classic pubsub terminology.

Also add a Flatbuffer<T> base type, along with both an array backed
version.  Rename the DetachedBuffer variant.

Change-Id: I257b5dbb5838120c479c4b98139657fc08e73150
diff --git a/aos/flatbuffer_merge.h b/aos/flatbuffer_merge.h
index 16372ed..afb4f69 100644
--- a/aos/flatbuffer_merge.h
+++ b/aos/flatbuffer_merge.h
@@ -43,15 +43,18 @@
 }
 
 template <class T>
-inline aos::Flatbuffer<T> MergeFlatBuffers(const aos::Flatbuffer<T> &fb1,
-                                           const aos::Flatbuffer<T> &fb2) {
-  return aos::Flatbuffer<T>(
-      MergeFlatBuffers(T::MiniReflectTypeTable(), fb1.data(), fb2.data()));
+inline aos::FlatbufferDetachedBuffer<T> MergeFlatBuffers(
+    const aos::Flatbuffer<T> &fb1, const aos::Flatbuffer<T> &fb2) {
+const uint8_t *data1 = fb1.data();
+const uint8_t *data2 = fb2.data();
+  return aos::FlatbufferDetachedBuffer<T>(
+      MergeFlatBuffers(T::MiniReflectTypeTable(), data1, data2));
 }
 
 template <class T>
-inline aos::Flatbuffer<T> MergeFlatBuffers(const T *fb1, const T *fb2) {
-  return aos::Flatbuffer<T>(MergeFlatBuffers(
+inline aos::FlatbufferDetachedBuffer<T> MergeFlatBuffers(const T *fb1,
+                                                         const T *fb2) {
+  return aos::FlatbufferDetachedBuffer<T>(MergeFlatBuffers(
       T::MiniReflectTypeTable(), reinterpret_cast<const uint8_t *>(fb1),
       reinterpret_cast<const uint8_t *>(fb2)));
 }
@@ -64,11 +67,11 @@
 }
 
 template <class T>
-inline Flatbuffer<T> CopyFlatBuffer(const T *t) {
+inline FlatbufferDetachedBuffer<T> CopyFlatBuffer(const T *t) {
   flatbuffers::FlatBufferBuilder fbb;
   fbb.ForceDefaults(1);
   fbb.Finish(CopyFlatBuffer<T>(t, &fbb));
-  return Flatbuffer<T>(fbb.Release());
+  return FlatbufferDetachedBuffer<T>(fbb.Release());
 }
 
 }  // namespace aos