Allow remote signing by introducing Signer interface

Now s3util can take a more generic Signer interface instead of the fixed
s3util.Config, which is needed to allow uploads from clients that shouldn't
have the secret key, and therefore requests a web server to sign its requests.