Provide an 'injection' point where a client can override how the parser generates syntax nodes.

There are currently two 'factories' provided for creating syntax nodes.  The first is used to
create the high-fidelity, concrete syntax nodes that we use today.  The second is used to create
'abstract' syntax nodes that can consume far less memory in the tree than the concrete version
(currently about 20% less memory).
Do not try to store skipped tokens in teh tree, unless we are creating a concrete syntax tree.
Throw an exception if someone tries to incrementally parse an abstract syntax tree.
Update where we place certain errors.

Now that our syntactic error pass may run on an Abstract syntax tree.  We need to make
sure that we only report errors on tokens that will actually be in the tree.