Instead of *being* an Observable, be *convertible* to an Observable

This drops Observable<T> and instead implements it using operators that
marshal the async read loop. This has a few advantages:

* Using Operators means we get synchronization for free
* Way less code
* When the Observable completes, we Automagically clean-up
* Exceptions are automatically marshalled into OnErrors
Nuke Observable<T>
Change to Refcounting semantics

In the previous commit, once you called AsObservable(), we kept trucking on
forever even if the last subscriber dropped off early, until the stream was
exhausted.

Instead, have at most one underlying person doing the reads and the rest
recieving that result, and if everybody unsubscribes early, we don't Dispose
and we stop reading the stream altogether.
hwhoops, merge fail