Greatly simplify subnodes collection in .getSubNodes()

The only trick was to collect all of them into a normal ArrayList which is
eventually reversed.

Much more simple than the previous code, more readable and faster.
Add trie matcher
Trie: documentation
Documentation for TrieMatcher
Minor code reformat
Small code modification
Annotate trie classes as @Beta
Add test helpers, plus TrieNodeBuilder tests
Tests for TrieMatcher; rename some test files
MatcherContext: make subNodes an ArrayList

There was no reason for it to be a LinkedList anymore. There was only call to
.push() in the whole code: replace with with .add(0, xxx) instead.
JoinMatcherTest: test the "no empty submatch for joining" case
Deprecate JoinParser; transfer join() into BaseParser
One more annotation, one more TODO
BaseParser: add trie()