resolves #575, #572 and #581 refactor reader to track include stack

- split the Reader into Reader and PreprocessorReader
- maintain an internal stack of include contexts
- include files relative to current file
- report file names with line numbers in most error/warning messages
- rename several reader methods to be more intuitive
- optimize operations in the readers
- don't dup on peek_line (noticeable performance hit)
- skip include directives when processing comment blocks (edge cases remain)
- rework reader tests