Enables up to 3 retries of uploading a single asset when encountering a network error or a HTTP 5xx error. Bonus: - simplifies ConcurrentUpload implementation - support Go context cancellation