Started implementing extension nonterminal partitioning

Implemented basic partitioning and fixed most of the failure tests.
Success tests obviously do not pass because partitioning of meta-vars
and productions is not implemented yet.

Mostly 'copy-paste and fix' implementation. Refactoring awaits...

A couple of failure tests also fail, namely: (+ ()) and (- ()) -- these
are treated valid nonterminal modifications of '+' and '-' nonterminals.
A just decision by the parser, but a bit surprising. I expected these to
be explicit additon and removal of an incorrectly described nonterminal.

Actually, a lot of tests fail because of the structural ambiguity beween
incorrect usage of lists for predicate names, meta-varible lists, and
production lists. I tend to think that introducing an explicit form like
'(productions ...)' will make things so much easier to parse.

So, it seems that I have to make a decision about deviating from the
original Nanopass syntax again.

  1) Deny usage of '+', '-', 'extends', and stuff as terminal and
     nonterminal names -- this stems from my desire to support
     implicit addition forms.

  2) Think over a simple _and_ unambiguous structural syntax for
     nonterminals that will be easily parsed.

  3) NB: there is another possible reserved keyword: 'maybe?' that
     should not be allowed to be used as a meta-varible name.