Allocate exact peek capacity list
Allocate single element matcher list for 'SymbolType's by default

'SymbolType's rarely define more than 1 matcher and the extreme cases
are still below the default ArrayList capacity of 10.
Prevent 'defaultList' from run-time modifications
Optimize 'matches' and 'first' allocation

* Start with minimum 'matches' capacity and let it grow as needed;
* Allocate single element list for 'first' where applicable.
Don't allocate a new 'children' list by default (use singleton empty list)

* Upon add() allocate minimal capacity list;
* For "SymbolList"s allocate new 'children' with capacity of 2, by default.
Use unsynchronized HashMap instead of synchronized Properties

Avoid performance penalty because of inherent macro syncronization.
Enable constructing Symbol with specified 'children' capacity

  + Use default ArrayList capacity for 'SymbolList's, if not sepcified.
Pre-allocate bigger SymbolList 'children' list when at the start of input

... that is, pre-allocate bigger result capacity for full pages, for example.