feat: Upload/download files to google cloud storage.

This change set adds the ability to upload or download files from google cloud storage.
Doesn't this restart the upload by resending the last byte? If the upload status says the server has received bytes `0-40`, and you send bytes `40-96` then byte `40` is sent twice. 

Probably not a big problem, but...