resolves #575 refactor reader to track include stack

- split the Reader into Reader and PreprocessorReader
- maintain an internal stack of include contexts
- report file names with line numbers
- rework reader tests
- rename several reader methods to be more intuitive
- optimize operations in the readers