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)
Yeah if I'm code reviewing too early, lemme know. Would be good to have a "design doc" up front like just with the usage cases and complete run through how it should eventually work. Then we can pick your code apart when the corner cases are filled.