Add file upload prototype.

This is very much in progress; we'll see how to best integrate it.
Merge branch 'file-upload-box'