storage: download integrity check

- [x] integrity tests
- [x] merge #299

Picking up from #299, where we're implementing integrity checks for uploads.
It's weird that you set md5 and crc32c based on if validation === 'all' and then check it in again in this block. Should just split it into two ifs in total and if validation is all, will check both. Failed will depend on the result of both in that case.