Refactor async download code
Split things up a little so the generic async fetch can live with the other fetch utils. This also makes it easier to test. Change the exception handling so that any exception in fetching is propagated when collecting the fetch result.
Showing with 94 additions and 49 deletions