Use stdio in favor of double buffering

The double buffered lexer was implemented in deference to the Dragon Book, but
benchmarking showed that it offered only a negligible performance improvement
over getc_unlocked().  That together with the greater complexity is reason
enough to switch approaches.