Allow constructing control loops from flatbuffers

The core changes here are to:
* Allow constructing StateFeedbackLoop's from flatbuffers using the
  code in *state_feedback_loop_converters.*
* Add constructors to the single-dof subsystem class to make use of
  this.
* Add code to control_loops.py to generate JSON files with the requisite
  constants (these end up containing identical information to the
  generated .cc files).
* Add interfaces to actually support the new JSON codegen to single-dof
  subsystem classes.
* Convert all of the drivetrains over to generating these. This I mostly
  do so that I can write a test where Iconfirm that the .cc files and
  the JSON files generate exactly the same content.

Change-Id: Iceac48f25ecac96200b7bf992c8f34a15fe6800c
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/frc971/math/BUILD b/frc971/math/BUILD
index 54df5bd..f33b9f9 100644
--- a/frc971/math/BUILD
+++ b/frc971/math/BUILD
@@ -1,4 +1,5 @@
 load("//aos/flatbuffers:generate.bzl", "static_flatbuffer")
+load("@com_github_google_flatbuffers//:typescript.bzl", "flatbuffer_ts_library")
 
 static_flatbuffer(
     name = "matrix_fbs",
@@ -6,6 +7,14 @@
     visibility = ["//visibility:public"],
 )
 
+flatbuffer_ts_library(
+    name = "matrix_ts_fbs",
+    srcs = [
+        "matrix.fbs",
+    ],
+    visibility = ["//visibility:public"],
+)
+
 cc_library(
     name = "flatbuffers_matrix",
     hdrs = ["flatbuffers_matrix.h"],