Use in-memory buffers for reading files, and handle newlines better.

Pawn has a whacky scheme of building a meta-source-file that concatenates #include information together. For mysterious reasons, it has a somewhat overlapped abstraction layer for building these temporary source files, as well as reading actual source files. This abstraction layer is basically defined as "do whatever fgets() does", which is not always right.

This patch changes the implementation to use in-memory buffers, which lets us have better control over line buffers and line endings.