s3 overwrite and checksum support

Original issue: #2529

I implemented my suggestion above myself. Hope that's OK without doing a round on the mailing list. The commit message outlines what changes I have done. My first attempt at Python, so I kept my changes minimal.

I also noticed that other Ansible modules are written in a cleaner style, with several methods instead of one big monolithic main method with if statements. 

However, I did not tidy up the code to adhere to that style with this pull request. I added some additional exit points in the code where I needed to alter the flow.

So what I have here is not very clean, but in order to be explicit with what I have changed I wanted to avoid refactoring and adding features in the same pull request. 

I'd be glad to give a hand and do refactoring at a later point, to more clearly separate logic and program flow.

@lwade as I understand you are the original author of the S3 module. Please have a look as well.