Async tasks: introduce sub-tasks, which can aggregate progress, and bubble up messages.