This should have been multiple commits, but it isn't. Sue me. This
change has two main goals:
1. Sample feedback at the beginning of the control loop iteration so
that it is always up-to-date when we are computing the actual drive
outputs. This means we're doing twice the amount of communication
with the labjack (previously, setting the output and reading the
feedback was done with a singe command). However, this makes the
loop structure much more standard, and it means that we aren't
constantly operating on feedback that is stale by one loop
interval.
2. Sample feedback into a (configurable size) buffer. This lets us
operate on aggregated feedback rather than on a single instantaneous
data point. Right now, feedback is computed as a moving average,
which acts as a rudimentary low-pass filter, reducing spurious
single-loop actions due to feedback spikes or other noise. However,
the other reason to aggregate some backwards data is that it will
let us do automatic stall detection in a simple way, although that
is not currently done.