Enhancing parser error handling

Changes:
- Added 'ParseError' enum to describe parsing errors
- Rewrote parser to not return optionals, but instead propagate errors
- Changed lexing errors to better match parsing and eval errors