Preserve object metadata (size, etag) when encryption is on

When encrypting data, the data that we receive from the client and the
data that we send to S3 is different, therefore the Etag returned by
S3 (which is the MD5 of the uploaded data) does not match the MD5 of
the original file, and the Content-Length is not the actual size of the
file.

To solve that, we serialize (and encrypt) the original metadata, and
attach it to the S3 object, restoring it when we fetch the object back.