Update Guardfile to run all TrackSensor specs after modifying TrackSensor::Base
Refactor: Handle device IO failure inside TrackSensor::Base#communicate

communicate was a leaky abstraction, because it unnecessarily required its users to handle device IO failure.
Refactor: Allow TrackSensor::Base to handle device initialization

This eliminates duplication in the initialization code.
Each TrackSensor class still reports its serial parameters for TrackSensor::Base#initialize_devices to use.
Refactor duplication out of TrackSensor specs into shared examples

These extracted examples should hold common for all serial-based track sensors.
Use the serialport gem to replace `stty` and File IO for OSX compatibility

SerialPort does not respond to #path, so extend each instance with that method.
Otherwise we can't detect devices that are already open in #initialize_new_devices.
Use only non-blocking IO in #communicate blocks

FIXME: Blank lines in the input still cause blocking IO because device.readline blocks after reading the only remaining newline:

    first_char + device.readline
Implement IO#readline_nonblock; remove all blocking IO

Now empty lines and \r\n style newlines will not casuse blocking problems.
Merge branch 'serialport'