Refactor upload/download progress

Expose progress properties publicly (bytes sent/received, total bytes, percentages) and automatically increment progress when the total size is unknown.