Runs block on scope and returns a future. Cancelling the future cancels the coroutine, and cancelling scope cancels work already in flight.