constructor({onMoreTasks}: {onMoreTasks: () => void}) {
    this._onMoreTasks = onMoreTasks;
    this._queueStack = [{tasks: [], popable: false}];
  }
TaskQueue instances are self contained and independent, so multiple tasks
of varying semantics and priority can operate together.

`onMoreTasks` is invoked when `PromiseTask`s resolve if there are more
tasks to process.