Not much point in "preprocess" prefix, anything to do with macros must be in the preprocessor.
Two-pass preprocessor, exact implementation of gcc preprocessor.

This commit begins a complete implementation of the gcc two-pass preprocessor, exactly as it is documented. The preprocessor is now a separate pass that lexes the source into tokens, which are then provided to the AST parser in the second pass. Not only does this automatically give us all of the detailed behavior of gcc, parsing source with no preprocessor directives is 30% faster than before!

This commit only implements #define. No ## token pasting or stringification yet.

- Preprocessor directives are checked that they only occur as the first token on a line.
- Self-referential macros are handled correctly, although in extreme cases where the macros refuse to expand because of self-references, the output may not be exactly the same as gcc.
- The parameter count of function macros is checked against the count of args passed in a call.
Preprocessor fixes

- Coalesced preprocessing and isPreprocessorStatement flags into preprocessorState, because I need more fine-grained knowledge of what is happening.
- \ line continuation in a #define is working now.
Change the variable name to be clearer, also there is an options.isMacro function
Make sure Macro.parameterMap does not inherit from Object, so that [] lookups only return it's properties.

Added Macro.getParameterByName() method instead of directly accessing the parameter map.
Let the Macro constructor set the parameter index.
Implemented macro argument stringification (#).
New: implemented token pasting (##) in preprocessor.

Also:
- Macro argument expansion/stringification is now performed lazily during body expansion.
- Factored macro expansion code into separate functions for better maintainability and so I can actually see what the logic is! No more using one giant function for the sake of saving a few nanoseconds!
- As per the gcc docs, argument substitution is done first, then a second pass does expansion.
Added tokInput and token.input references.

Input can come from source code, macros defined on the command line, and synthesized tokens. So every token needs to know what its source is, which is what the start/end positions refer to.
Fixed: lastTokType was not always set to _eol, which caused subsequent preprocessor directives to fail.
New: added support for #undef.

This necessitated a change to macro lookup. Previously I was caching a token's macro reference, which doesn't work when the macro it referred to is #undef'ed.
Fixed: calling a macro with an empty argument list created one empty arg.
Fixed: eol is allowed between tokens in macro arguments.
Fixed: stringification was not converted using the token's input.

The stringified token is fully synthesized now and refers to its own input.
New: issue a warning if redefining a macro
New: stricter macro parameter parsing, beginning support for variadic macros
Use specific check for name after #undef

Removed unused cloneToken function.
New: variadic macros using ... as a macro parameter and __VA_ARGS__ in the body
Fixed: macro equivalence is now tested before warning about redefinition
regexpAllowed is now stored with tokens, and locations are not unless options.locations is on.