constructor (commands) {
    if (!commands || (commands && !Array.isArray(commands))) {
      throw new Error('\'commands\' must be an array.')
    }
    this.commands = commands

    this.cancelled = false
    this.runningCommand = null
  }
CommandRunner runs the cinematic and handles command cancellation that the
user may initiate.

Once commandRunner has been cancelled every command is cancelled immediately after
running. Thus we only run a single dialog node at a time.