Improve C++ codegen target options handling
Replace tabs with 4-spaces in Python code
Start improving error reporting and location info

FIXME: location information is completely wrong
Move lexical analyzer to separate file lexer.py
Remove shebang from parser.py
Refactor some target code into a base class
Add 'includes' option to C++ target
Add #line directive support to C++ target

Also fix location tracking by counting newlines inside of discarded
comment tokens.
Don't change the output file if contents haven't changed