Interpret S3 response details properly

If we get a response with a non-200 status code, interpret it as a failed save and log something useful. Also use heroku-style key=value logging.

/cc @hampelm