code: func (sm *StateMachine) validate() []error {
  	validationErrors := make([]error, 0)
  	if sm.stateDefinitionError != nil {
  		validationErrors = append(validationErrors, sm.stateDefinitionError)
  	}
  
  	// TODO - add Catcher validator
  	/*
  		Each Catcher MUST contain a field named “ErrorEquals”, specified exactly as with the Retrier “ErrorEquals” field, and a field named “Next” whose value MUST be a string exactly matching a State Name.
  
  		When a state reports an error and either there is no Retry field, or retries have failed to resolve the error, the interpreter scans through the Catchers in array order, and when the Error Name appears in the value of a Catcher’s “ErrorEquals” field, transitions the machine to the state named in the value of the “Next” field.
  
  		The reserved name “States.ALL” appearing in a Retrier’s “ErrorEquals” field is a wild-card and matches any Error Name. Such a value MUST appear alone in the “ErrorEquals” array and MUST appear in the last Catcher in the “Catch” array.
  	*/
  	return validationErrors
  }
docs: // validate performs any validation against the state machine
  // prior to marshaling