State tagging for preprocessed input.

Some of the macro expansions inside gawk cause problems as preprocessor
output is interleaved into arbitrary point in the code. This is normally
fine as by definition it is deleted (rather than added) during preprocessing.

To support this the PREPRO tokens have been moved onto the hidden channel.
A prepass scans the token stream and records last token encountered in the
custom field of the token.

During the parse, at each top-level we find the last #line encountered to
work out where the construct being parsed has come from. This requires a
search as the synthetic nodes added during tree construction do not get
tagged when we scan the lex output. The first valid annotation is used.

Increased the buildConfig demo to cover more of gawk. Not all of the
translation units produce error free parses yet, but some of them produce
valid models in the TranslationUs and fill in the system/project level
information.