Avoid the use of async/await in the shared library

This is a pull request to think about, and not necessarily merge.

What I've done here is remove the use of `async`/`await` in the shared library without changing any of the original behavior (except in one case, noted below). This provides you with two advantages:

1. Providing a full-featured library targeting .NET 4.0 is straightforward. The threading library provides the necessary `StreamExtensions`, and there is no need to depend on the [Microsoft Async](https://www.nuget.org/packages/Microsoft.Bcl.Async/) package.
2. Providing a .NET 3.5 version becomes possible, if you wish, using the [TaskParallelLibrary](https://www.nuget.org/packages/TaskParallelLibrary/) package and my back-port of [System.Net.Http to .NET 3.5](https://github.com/sharwell/openstack.net/tree/checkpoint/HttpClientAlt/src/System.Net.Http), which will soon be available as a separate NuGet package.
The behavior change occurs here. If the `SendAsync` call transitions to the `Canceled` state, as opposed to `RanToCompletion` or `Faulted`, the `TaskCanceledException` will be propagated all the way to the `resultTask` that is returned from this method. The threading library in use includes `Finally` methods to provide cleanup logic that executes following a cancellation, but there is no way to completely suppress the cancellation and continue as though it didn't happen.