Gideon : Implemented a smarter way to do the matching of alternate nonterminals
for soft syntactic constraint decoding. As it turns out, naive matching based on
looping over all child non-terminals in a children table from the Trie, is just
too expensive for reasonable size grammars.
In fact the best would be split the Trie in two parts: one for children that are non-terminals
and one for children that are terminals.
This would be the most general solution.
This is an expensive solution only in that is requires a thorough refactoring of the
rule table code.

As an intermediate solution we implemented first something now that works well for
small sets of Nonterminals. Rather than looping over all children and checking for
each if it is a nonterminal, we rather get a fixed set of present nonterminals
(except for OOV and Goal) in the grammar, and use those to directly get those
alternate nonterminals if present using the 'containsKey' and 'get' method of HashMap.
This is still relatively very cheap compared to the old alternative, provided the
number of Nonterminals is small. If the latter is not the case this solution will  not
work, we need to refactor the code and make an efficient method getNonterminalChildren
in the Trie implementation to deal with the more general case.