Robot interfaces

Allows for standard robot Interfaces to be defined and then for drivers to implement a Interfaces. The Interface methods are then dynamically added to the Robot that the driver belongs to. 

For example, the `Rover` interface is for ground moving devices and vehicles. It has a `forward` method as part of this interface. A particular platform can implement the Rover interface, so that robot code can be reused across platforms, by relying on the Rover interface, instead of always using lower level device methods.

This PR includes an initial definition of the `Rover` interface.