Improve RobotInteraction thread safety

This change attempts to simplify RobotInteraction and improve thread safety.

These changes focus on InteractionHandler.  Some of the functionality is pulled out into helper classes (LockedRobotState and KinematicOptionsMap) so that the intent of InteractionHandler is more clear.

All non-const members are now protected with internal locks.
The locking scheme is documented in comments.

The state update is simplified, removing the need for condition variables.  Instead in-place updates are done using callback functions with the modifyState method (inherited by RobotInteraction from LockedRobotState).