Refactor download to util and added retry logic in it.

Using request-replay with streams did not work well because piped data would be concatenated on retry and so on.

This fixes #704 #699
Also improves #700 behaviour.

Other improvements:
- Progress MB's now have 1 decimal point
- Retry messages are now `warn` (yellow) with a better sentence, including the number of sec till the next retry
- Progress report starts immediately after the first retry