An Execution encapsulates a single run of a function under test against a chosen scheduler.
Its only useful method is Execution::run, which executes the function to completion.
ExecutionState contains the portion of a single execution’s state that needs to be reachable
from within a task’s execution. It tracks which tasks exist and their states, as well as which
tasks are pending spawn.