Add support for progress reports

In this commit we've added support for progress reports (using the `CURLOPT_PROGRESSFUNCTION` option inside CURL). We've only added support to putObject and getObject. No one of their aliases will be able to use this functionality.

We've also added the ability to limit reports to a certain accuracy, so progress events are only reported to the consumer when their is enough difference between the current progress and the last report.