Lexer: Make panic recovery more verbose.
Tests: Refactor functional tests as unit tests.
Lexer: Refactor lexing of string literals.

* Split lexing of well-formed strings from lexing of malformed ones.
* Allow empty string literal.