Unit Tests

- Moving away from asserts, they are evil. They don't even debug
properly.
- Implementing unit tests for the lexer.
- Fixing some bugs uncovered by the tests.
- TODO: Validate errors DSL.