Add generic drivetrain EKF

This will be followed by a commit with specific utilities for handling
localization in the 2019 game with cameras and targets.

Change-Id: Ic15084e8f7c8b21eb7ac65a493d04da5d2dd941b
diff --git a/frc971/control_loops/drivetrain/BUILD b/frc971/control_loops/drivetrain/BUILD
index ee05fc5..6725987 100644
--- a/frc971/control_loops/drivetrain/BUILD
+++ b/frc971/control_loops/drivetrain/BUILD
@@ -41,6 +41,31 @@
 )
 
 cc_library(
+    name = "hybrid_ekf",
+    hdrs = ["hybrid_ekf.h"],
+    deps = [
+        ":drivetrain_config",
+        "//aos/containers:priority_queue",
+        "//frc971/control_loops:c2d",
+        "//frc971/control_loops:runge_kutta",
+        "//third_party/eigen",
+    ],
+)
+
+cc_test(
+    name = "hybrid_ekf_test",
+    srcs = ["hybrid_ekf_test.cc"],
+    deps = [
+        ":drivetrain_test_lib",
+        ":hybrid_ekf",
+        ":trajectory",
+        "//aos/testing:googletest",
+        "//aos/testing:random_seed",
+        "//aos/testing:test_shm",
+    ],
+)
+
+cc_library(
     name = "gear",
     hdrs = [
         "gear.h",
@@ -57,12 +82,12 @@
         "splinedrivetrain.h",
     ],
     deps = [
+        ":distance_spline",
         ":drivetrain_config",
         ":drivetrain_queue",
         ":spline",
-        ":distance_spline",
         ":trajectory",
-    ]
+    ],
 )
 
 cc_library(
@@ -186,8 +211,8 @@
         ":drivetrain_queue",
         ":gear",
         ":polydrivetrain",
-        ":ssdrivetrain",
         ":splinedrivetrain",
+        ":ssdrivetrain",
         "//aos/controls:control_loop",
         "//aos/logging:matrix_logging",
         "//aos/logging:queue_logging",
@@ -304,6 +329,7 @@
 cc_binary(
     name = "spline.so",
     srcs = ["libspline.cc"],
+    linkshared = True,
     deps = [
         ":distance_spline",
         ":spline",
@@ -313,7 +339,6 @@
         "//third_party/eigen",
         "//y2019/control_loops/drivetrain:drivetrain_base",
     ],
-    linkshared=True,
 )
 
 cc_test(