Convert all year's robots to proper event loops

Each robot has a couple of event loops, one per thread.  Each of these
threads corresponds to the threads from before the change.  y2016 has
been tested on real hardware.

Change-Id: I99f726a8bc0498204c1a3b99f15508119eed9ad3
diff --git a/frc971/wpilib/drivetrain_writer.cc b/frc971/wpilib/drivetrain_writer.cc
index 8d388dc..fdbc028 100644
--- a/frc971/wpilib/drivetrain_writer.cc
+++ b/frc971/wpilib/drivetrain_writer.cc
@@ -10,27 +10,23 @@
 namespace frc971 {
 namespace wpilib {
 
-void DrivetrainWriter::Write() {
-  auto &queue = ::frc971::control_loops::drivetrain_queue.output;
-  LOG_STRUCT(DEBUG, "will output", *queue);
-  left_controller0_->SetSpeed(SafeSpeed(reversed_left0_, queue->left_voltage));
+void DrivetrainWriter::Write(
+    const ::frc971::control_loops::DrivetrainQueue::Output &output) {
+  LOG_STRUCT(DEBUG, "will output", output);
+  left_controller0_->SetSpeed(SafeSpeed(reversed_left0_, output.left_voltage));
   right_controller0_->SetSpeed(
-      SafeSpeed(reversed_right0_, queue->right_voltage));
+      SafeSpeed(reversed_right0_, output.right_voltage));
 
   if (left_controller1_) {
     left_controller1_->SetSpeed(
-        SafeSpeed(reversed_left1_, queue->left_voltage));
+        SafeSpeed(reversed_left1_, output.left_voltage));
   }
   if (right_controller1_) {
     right_controller1_->SetSpeed(
-        SafeSpeed(reversed_right1_, queue->right_voltage));
+        SafeSpeed(reversed_right1_, output.right_voltage));
   }
 }
 
-void DrivetrainWriter::Read() {
-  ::frc971::control_loops::drivetrain_queue.output.FetchAnother();
-}
-
 void DrivetrainWriter::Stop() {
   LOG(WARNING, "drivetrain output too old\n");
   left_controller0_->SetDisabled();