code: function Lexeme(config, Token) {
    this._cleanConfig(config);
  
    this._Token = Token; // The Token object constructor
  
    this.mode = config.mode;
    this.token = config.token;
  
    this._pattern = config.pattern;
    this._attributeValue = config.attributeValue;
    this._partialMatchAttributeValue = config.partialMatchAttributeValue;
    this._isDefault = config.isDefault;
  }
docs: Represents the configuration for a Lexeme within the Lexicon that we are
  building. Configurations should look like:
  
  ## String Mode
  
  The lexeme configuration should look like:
  
  ```
  
  {
  token: 'name-of-this-token-type',
  pattern: 'some string to match exactly+',
  attributeValue: function (history) {
  return 'my token value based on the state history';
  }
  }
  
  ```
  Where the strings contain only literal characters.  The `attributeValue()`
  function uses the character history to this point to identify what the return
  attribute value should be.  Set it to null for a null attributeValue.  Leave
  it undefined to have it be the input that was received to transition to the
  current state.
  
  TODO: accept only the `+` repeating symbol for an individual letter
  or the `\\+` escape sequence for a literal `+` symbol.