Refactored S3 using AWS library and update with new filer API

What does S3 do in the case that we request a key that doesn't exist?  Other providers return `null`, and we need to make sure we do the same here (e.g., does it send back an error?  If so, we have to deal with that case and not propagate the error).