doAwait

Make progress on the still-uncompleted await tree rooted at future, or return null when nothing is left to await (every node already resolved).

On suspension this does not return a value: it sneaky-throws AbortedExecutionException, which should be treated as a clean abort of the user code, not a failure to re-report.