An abstract implementation of a message peer. Subclasses need to
provide the following methods: connect, disconnect,
isConnected, sendMessage, receiveMessage. This superclass
takes care of the listeners, the printer, and bind/lookup.