Make SimpleConnector.Listener private final to prove I can mess with it
Remove uuid from SimpleConnector.Listener

The default for Object is that hashCode = System.identityHashCode
and equality is reference (same object) equality, so the
UUID thing was a roundabout way to get the same behavior
which was already the default.
rename SimpleConnector.listeners to connectListeners

So we can add other kinds of listener too.
add SimpleConnector.ErrorListener
Implement connection retry and error handling

 - perform the connect asynchronously in another thread,
   so connection and error callbacks are ALWAYS async
 - require an explicit SbtConnector.open so callbacks
   can be set up before doing anything, otherwise your
   onError might not be called because you add it too late.
 - retry connect every 4 seconds if the connection closes
 - do not print socket close errors, it is expected for
   the socket to close sometimes e.g. on server restart
Immediately zero retry timeout when closing SimpleConnector
SimpleConnector: set currentClient to None when closed
SimpleConnector: redo with state machine so it's comprehensible
SbtConnector: merge onConnect, onError, open into a single open method

This way it's completely obvious how to use the API (hopefully).
Merge pull request #81 from sbt/wip/havocp-connect-errors

Report connection errors and retry connecting