Base class for establishing connections to various IP based robot subsystems. Encapsulates the process of connecting and disconnecting, transmitting data and monitoring for responses. Subclasses must implement the onDataReceived method in order to process incoming data in whatever way is appropriate for the connection type.