Copy flatbuffers efficiently and respecting DAGs.

Deduce the memory region needed to be copied by traversing the DAG, and
then copy it.  This has no mallocs (yay!), and works with DAGs.

There are some cases where we actually want to copy things recursively.
Do that when asked.

Change-Id: Ia0ffde26d569fa92ee2bbb49706c17d9d657d125
diff --git a/y2020/vision/camera_reader.cc b/y2020/vision/camera_reader.cc
index 63cabcf..fd79d09 100644
--- a/y2020/vision/camera_reader.cc
+++ b/y2020/vision/camera_reader.cc
@@ -244,7 +244,7 @@
 
     const flatbuffers::Offset<sift::TransformationMatrix>
         field_to_target_offset =
-            aos::CopyFlatBuffer(FieldToTarget(i), builder.fbb());
+            aos::RecursiveCopyFlatBuffer(FieldToTarget(i), builder.fbb());
 
     sift::CameraPose::Builder pose_builder(*builder.fbb());
     pose_builder.add_camera_to_target(transform_offset);