Provide transfer progress via callback

Upload and download progress information can be tracked by providing a
callback that will get invoked as progress happens.