Make ReactiveSockets more "Reactive"

This PR does a few things, if you don't want all features, I can break them up:

- Rewrite some of the code to be "Rx-style"
- Call `OnComplete()` on the underlying Subjects for the exposed `IObservables` in `ReactiveListener` and `ReactiveSocket` when the classes are disposed. This allows any subcriptions of consumers to automatically be disposed.
- Fixed a bug that causes 100% CPU consumption when a connected socket closes the connection unexpectedly. This bug was present before my changes, but I fixed it in an "Rx-style"