implement stop command

The stop command interrupts all move commands and returns the position
at which the device stopped.

The command acts differently than the existing command groupings. At
first glance it would seem to be a 'move' command, but the move commands
are enqueued instead of 'done now'. The setting commands are 'done now',
but they also have a generic behavior where if you do a query for that
command id, it returns the current setting value. The stop command
obviously has no error to return and errors out from the device.

It also has the unique behavior where if a move is in progress, it
supersedes it and must handle the number of responses appropriately.

The general structure of the classes is followed in a hopefully generic
way so that if other commands are discovered that have similar behavior
they might be added to the command group
Send stop command to stages on keyboard interrupt
Stop all devices on device timeout error