Basic implementation of upload workflow

To @dangoor. Note that this is a pull request into your branch.

Basic upload workflow is working, although I can't test the error cases because of the issue I noted in your pull request (`request.errors` from the validator isn't being handled).

This also contains a couple of fixes for outstanding issues. I went ahead and put `Fixes #n` in the commits since you'll be reviewing them anyway, so auto-close is probably fine :)