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.