Preprocessor: implement token lookahead and use it for func-like macro detection
pp/LineReader,PPLexer: add a sentinel byte at EOF

A '\0' sentinel byte at EOF allows us to look one character ahead in the
without a range check. If we are at EOl, the next byte will be '\n',
or if at EOF, it will be '\0'. Either way, it is safe to access it.

Furthermore, if the next character is what we expect it to be
(not '\0' or '\n'), we can safely access the one after that,
and so on.
pp/PPLexer: remove unnecessary range checking

The sentinel character added at EOF allows us to safely inspect
consecutive characters as long as none of them are '\0' or '\n'
(the sentinels).

Also fixed a bug in handling numbers.
PPLexer: combine whitespaces into a single token

This guarantees that the lookahead cannot grow beyond 2
when searching for func-like macro.
Preprocessor: slightly more flexible debug output