Support for .NET 4

Hey Marc,

I'm interested in adding support for .NET 4. I maintain [a few libraries using Redis](https://github.com/search?q=%40TheCloudlessSky+redis) that I'm switching over from ServiceStack.Redis. However, I'd like to maintain .NET 4 support for those that require it. All of my apps use .NET 4.5, so it isn't a problem. I dropped the framework version to 4.0 and started digging. Here's what's needed:

- [x] Support async on .NET 4. From what I've read, this means taking a dependency on [Microsoft.Bcl.Async](http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx).
- [ ] Make an implementation of `ZipArchive` (perhaps using `System.IO.Packaging`).
- [x] Conditionally support `Environment.CurrentManagedThreadId`:

        #if NET40
            int currentThread = Thread.CurrentThread.ManagedThreadId;
        #else
            int currentThread = Environment.CurrentManagedThreadId;
        #endif

- [x] Implementation for `Dns.GetHostAddressesAsync()`
- [x] Implementation for `Task.Delay()`, `Task.WhenAll()` and `Task.WhenAny()`.
- [x] Update the build process to support building packages for `lib\net40` and `lib\net45`.

Would this be something you're willing to pull in?