Reworked motor control: provided new functions and features, but retained legacy interface

- restructured/rewrote motor (wheel and gripper) control code
- maintained legacy interface provided by move*() and
gripper*() functions, but...
- defined new functions to interface with motors
- drive*(), spin*() and turn() for wheels
- drive*() replaces moveForward()/moveBackward()
- spin*() replaces moveLeft()/moveRight()
- turn*() functions newly provide capabilities to make
smooth turns (e.g. for drawing arcs or circles)
- openGripper(), closeGripper(), setGripperSpacing() for gripper
- new wheel motor functions take integer distance arguments (instead
of float like the legacy functions)
- distance is in mm instead of cm (10mm == 1cm)
- angles are still in degrees
- new gripper functions can roughly track gripper position
- openGripper() and closeGripper() may still overdrive the
gripper motor slightly but the motor will run no longer than
would be needed to fully open from fully closed or vice versa
- openGripper() and closeGripper() can now move the gripper by a
specific distance (gripper separation) in mm
- added function setGripperSpacing() to set gripper separation
to specific distance (mm), assuming gripper was previously
fully opened or closed in order to calibrate its position
- each wheel (drive, spin, turn) and gripper function now takes an
optional speed argument
- provided wheelsAreRunning(), stopWheels(), wheelsAreDone() and
restartWheels() functions (and an equivalent set for the gripper)
to manage motor activity if motors were previously started in a
non-blocking fashion
- added option for motors to actively hold position while not running
(instead of just turning stepper coils off); this feature also
provides for active braking; see enableActiveHold*(), etc.
- via setWheelDiameter() and setWheelSeparation(), added mechanism
for overriding default wheel diameter and wheel-to-wheel separation
to tune driving/spinning behavior for increased accuracy of driving
distances or angles by
- implemented experimental feature to compensate for backlash in
stepper motor gears; see enableBacklashComp*(), etc.
- moved motor state variables into SparkiClass, and moved interrupt
service code into SparkiClass; interrupt service routine now calls
SparkiClass function