Head is similar to Get, but returns only the response headers. The response body is not
transferred across the network. This is useful for checking if a file exists remotely,
and what headers it was configured with.

Put uploads content to S3. The length of r must be passed as size. md5sum optionally contains
the MD5 hash of the content for end-to-end integrity checking; if omitted no checking is done.
contentType optionally contains the MIME type to send to S3 as the Content-Type header; when
files are later accessed, S3 will echo back this in their response headers.

If the passed size exceeds 3GB, the multipart API is used, otherwise the single-request API is used.
It should be noted that the multipart API uploads in 7MB segments and computes checksums of each
one -- it does NOT use the passed md5sum, so don't bother with it if you're uploading huge files.

Abort cancels the upload. If an upload is started but not completed, the storage space will
be counted against your AWS account (and getting rid of it is difficult), so you should make
sure either Abort or Complete is called.

For your convenience, Abort is set as the finalizer for S3Multipart objects as a failsafe, but
you shouldn't rely on that.

AddPart uploads the contents of r to S3. The number of bytes that r will read must be passed
as size (otherwise the request cannot be signed). Optionally, you can pass the md5sum of the
bytes which will be verified on S3's end; if md5sum is nil no end-to-end integrity checking
is performed. As per S3's API, size must always exceed 5MB (1024 * 1024 * 5) bytes, except
for the last part. This is not enforced locally.