Some Amazon S3 abstractions

This pull request adds several Amazon S3 abstractions:

1. Upload a local directory to an Amazon S3 bucket
2. Download an Amazon S3 bucket to a local directory
3. Upload files from one bucket to another
4. Easily delete all objects from a bucket that match a prefix or a regular expression
5. S3Client::upload() to upload an object and switch to a multipart upload if the size of the object exceeds a customizable threshold.
6. Added the ability to resume a previously interrupted download using ResumableDownload