Stream files as directly as possible into the blob store

Obviously we can't go directly as we need the sha1 of the file to
derive the file name from, but we can at least only read the file
once.