Preprocessor conditionals

- Added support for #ifdef, #ifndef, #else, #elif.
- Just to be safe, switched to tokInput in place of input, since tokInput always points to the current input source.
- Added Array.prototype.last() method.
- Eliminated preprocessorState_macroBody bit flag, it wasn't necessary.
- Fixed some cases where macros were being expanded when they shouldn't have been.
- Added check for EOF with orphaned #if after handling a preprocess directive.