Lexer development and more unit tests. Error refactoring.

Depends on #17.

### Lexer:
* Error message during panic-mode recovery outputs state (if relevant).
* Address issue #8.
* Rewrite lexing of char and string literals:
  * Fix bad regex.
  * Lex well-formed tokens separately from malformed ones. Ignore more aggressively in recovery states.
  * Allow empty string literal. Refactor error for empty character literal.
  * Simplify error reporting. Drop errors of char/string literals spanning multiple lines.
* Fix bad formatting of error messages.

### Parser:
* Move default `start` argument out of `parse` function, to enable unit testing of individual grammar rules.

### Error:
* DRY: Merge `DummyLogger` and `LoggerMock`.
* Abstract common Interface of `Logger` and `LoggerMock`
* Fail early on badly formatted string.

### Tests:
* Add almost complete suite of unit tests for `lexer` module.
* Drop functional tests replaced by unit tests.
* Beautify code.