Switch to Cold Observables

This PR switches the `IObservable` implementation to one that returns Cold Observables. This is a breaking change for 2.0:

Before:

```cs
var observable = someRestService.ReturnsAnObservable();
var result1 = await observable;
var result2 = await observable;

// result2 is just a replayed result1, the network request was made when
// we called ReturnsAnObservable regardless if anyone cared.
result1 == result2;
>>> true
```

After:

```cs
// Does nothing
var observable = someRestService.ReturnsAnObservable();

// Makes a web request
var result1 = await observable;

// Makes a *different* web request
var result2 = await observable;

result1 == result2;
>>> maybe?
```

Web requests created via Observables can be preemptively canceled via unsubscribing to the Observable (unlike the Task-based methods, which currently don't support Cancellation)