s3_request should return {aws_error, Reason} in error state

On unstable connections a put_object call sometimes timeout. In my tests this crashes the server on ``{Headers, _Body} = s3_request(Config, put, BucketName, [$/|Key], "", [],POSTData, RequestHeaders),`` [erlcloud_s3.erl, line 607] . s3_request on error state triggers a crash. I think returning a tuple: ``{aws_error, Reason}`` and leave the handling to the calling service would better handle the situation. This way the calling service can respond to the initial request instead of just crashing.