storage: download integrity check

- [x] integrity tests
- [x] merge #299

Picking up from #299, where we're implementing integrity checks for uploads.
80-char limits aside, something like this?

``` js
var failed = false;

// assume the checks failed
var crcFail = true;
var md5Fail = true;

var hashes = {};
res.headers['x-goog-hash'].split(',').forEach(function(hash) {
  var hashType = hash.split('=')[0];
  hashes[hashType] = hash.substr(hash.indexOf('=') + 1);
});

var remoteMd5 = hashes.md5;
var remoteCrc = hashes.crc32c.substr(4);

if (crc32c) {
  crcFail = new Buffer([localCrc32cHash]).toString('base64') !== remoteCrc;
}

if (md5) {
  md5Fail = localMd5Hash.digest('base64') !== remoteMd5;
}

if (validation === 'all') {
  // assume there is always crc32c
  failed = hashes.md5 ? md5Fail || crcFail : crcFail;
}
```