switch to cooperate instead of using DeferredSemaphore.
don't spam by default.
Implement working reconnection.

ReconnectingClientFactory doesn't work with endpoints.
Also implement a stop() method on WatchedConnection.
maybe implement listen() in a way that allows it to be called multiple times.
also some other changes.
some docstring / comment improvements.