Allow optional args to be passed through

If more params are passed than are expected, we should pass them through to the underlying implementation.

This allows (e.g.) mime types / ACL headers to be supplied to the S3 backend.