Clean up call graph node states a bit
Non-Array-based generator ID allocation

so that we can more easily clean up generators afterwards.
Get rid of redundant runOneStep() calls in Dispatcher.wait()

CallGraph.id() already adds nodes for generators it hasn't seen yet, so
we can just let the main loop take care of this.
Switch to asynchronous evaluation of dispatch(), runOneStep()

so that we can evaluate callbacks and promises as part of this flow.