pp/LineReader: 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.