Exchange callbacks for events/observables.
Resolve #15 return SocketDescriptor consistently rather than just the IPEndPoint. Connected and disconnected now match, as to Sent and Received.