Streaming upload support

This file was accidentally left out of the earlier commit.  It supports
multipart upload/download, and now supports streaming the upload file
instead of requiring it to be in memory first.