Refactor encryption header for multipart uploads

Fixes the way the encryption header is sent for multipart uploads to S3
so that the encryption header is only sent during the initiate request
and not for each object part upload.
Add support for S3 `storage_class`

This commit adds support for the S3 `storage_class` header to allow for
objects uploaded to be stored with the `REDUCED_REDUNDANCY` flag. This
defaults to `:standard`, which does not send a special header to the AWS
API.