storage: support resumable uploads

## Do not merge!

RE: #298

It works!

It's 200 lines, but it works!

(Still needs tests, but regressions work as usual)
Should this be set to a non-number so `util.is(lastByteWritten, 'number')` in `resumeUpload()` will fail if first request fails and we have to resume from scratch?