Use UploadResult as upload() result

Provide additional details about upload.
Note that action will be None if no file was actually uploaded.
Add some logging, fix closing issue with BytesIO
Fix typo and UploadSession argument
Don't log response, we already log it once
Mention Uploader in README
Add more Uploader tests, cover happy paths