tokenizer.py: better error handling and reporting
ast.py: catch errors from pratt parser
interpreter.py: support for new operators and some clean-ups