append(nextMachine) {
    let states = [...this.states];
    for (let i = 0; i < nextMachine.states.length; i++) {
      let otherState = nextMachine.states[i];
      states.push(
          otherState.replaceState(nextMachine.startState, this.fallThroughState));
    }

    let exceptionBlocks = [...this.exceptionBlocks];
    for (let i = 0; i < nextMachine.exceptionBlocks.length; i++) {
      let tryState = nextMachine.exceptionBlocks[i];
      exceptionBlocks.push(
          tryState.replaceState(nextMachine.startState, this.fallThroughState));
    }

    return new StateMachine(this.startState, nextMachine.fallThroughState,
                            states, exceptionBlocks);
  }
Returns a new state machine which will run this machine first, then run
the next machine.
@param {StateMachine} nextMachine
@return {StateMachine}