NG: Microsoft Azure storage driver

This is the storage driver implementation to enable hosting the storage backend of the next-generation docker-registry on [Microsoft Azure Blob Storage Service](http://azure.microsoft.com/en-us/services/storage/). In order to fully run the tests, an Azure storage account will be needed. In case you need one, please contact me or you can [sign up for Azure](http://azure.microsoft.com/en-us/pricing/free-trial/) if you don't have an Azure account and create a storage account yourself.

Signed-off-by: Ahmet Alp Balkan <ahmetalpbalkan@gmail.com>

-----

/cc: @stevvooe @dmp42 @johngossman
Okay, here's the story, bear with me. :smile: 

If the caller sends a 16 MB chunk to `WriteStream`, it will get split into 4 MB chunks (max block size in Azure) and will get uploaded like this:

1. Upload `Block1`
1. Upload `Block2`
1. Upload `Block3`
1. Upload `Block4`
1. Commit blob with blocks = `["Block1", ..., "Block4"]`

Let's say if `Upload Block3` failed due to some intermittent connectivity issues. At this point, the blob does not exist yet, (because we did not call `Commit Block`), therefore CurrentSize will be 0 (or effectively ErrPathNotFound). Unless you commit blocks, the blob does not exist. This is where it differs from a local filesystem. 

If the caller sends the same chunk again upon that failure, this whole process will start from the beginning. Let's say the first 16 MB chunk is uploaded correctly and blocks are committed (remember, all these are transactional) `CurrentSize` will return 16 MB.

Second `WriteStream` call with the next 5 MB chunk will get uploaded the same way:

1. Upload `Block5` (4 MB)
1. Upload `Block6` (1 MB)
1. Commit blob with blocks = `["Block1", ..., "Block4", "Block5", "Block6"]`

In this case, let's say `Upload Block6` failed, now the `CurrentSize` will still return 16 MB because that's the total size of blocks committed last time. And if the WriteStream gets initiated again, the only resumable offset is 16*1024*1024, and that's where `Block5` and `Block6` should get updated.