Improve runtime vocabulary information

* Fixes #238
* Fixes #579 (unable to use both `'.'` and `DOT` in XPath expressions)
* Fixes #711

## Remaining Issue

The current implementation provides the *literal name* of a token in the same form used in an ANTLR grammar, which I will call the "ANTLR literal name". The alternative representation, which I will call the "target literal name", would be to provide the exact input sequence matched by a literal as a string literal in the target language.

All strings in the following table are given as a Java language string literal.

| Rule | Matched input text | ANTLR literal name (in a Java string) | Target literal name (Java target) |
| --- | --- | --- | --- |
| `Foo : 'foo';` | `"foo"` | `"'foo'"` | `"foo"` |
| `NL : '\n';` | `"\n"` | `"'\\n'"` | `"\n"` |