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.