code: function traverse(transition, instance, message) {
      var onTraverse = transition.onTraverse.slice(0);
      // process static conditional branches - build up all the transition behavior prior to executing
      while (transition.target && transition.target instanceof PseudoState && transition.target.kind === PseudoStateKind.Junction) {
          // proceed to the next transition
          transition = selectTransition(transition.target, instance, message);
          // concatenate behavior before and after junctions
          push(onTraverse, transition.onTraverse);
      }
      // execute the transition behavior
      invoke(onTraverse, message, instance);
      if (transition.target) {
          // process dynamic conditional branches if required
          if (transition.target instanceof PseudoState && transition.target.kind === PseudoStateKind.Choice) {
              traverse(selectTransition(transition.target, instance, message), instance, message);
          }
          else if (transition.target instanceof State && isComplete(transition.target, instance)) {
              evaluateState(transition.target, instance, transition.target);
          }
      }
      return true;
  }
docs: Traverses a [[Transition]].
  
  This method encapsulates the logic for dynamic and static conditional [[Transition]] branches ([[Choice]] and [[Junction]] respectively).
  @param transition The [[Transition]] to traverse.
  @param instance The state machine instance.
  @param message The message that triggerd this [[Transition]] traversal.
  @returns Always returns true.
   @internal