Versioning updates and documentation

* Extensively document the `RuntimeMetaData` class
* Provide access to the executing version of the runtime library, in addition to the existing `VERSION` compile-time constant
* Distinguish between the version of the tool used to generate code, and the version of the runtime which a parser is compiled against
* Add additional parameters to the `checkVersion` method to provide the ability to localize additional types of semantic compatibility problems
* Include notes for other target developers regarding the design and implementation of the runtime compatibility check
* `ANTLRVersionMismatchException` is now a checked exception. This is not an exception we want to hide from users. The calls to `checkVersion` within static initializer blocks are surrounded with a `try`/`catch` statement to wrap the error in an `ExceptionInInitializerError`, which is the appropriate error to throw for this case.
* Remove the dead code in `checkVersion`, and replace it with a comment describing why no compatibility checks are needed in the current release. Until such time as a semantic change is introduced in a release that affects ANTLR 4.2.3 or greater, this method does not need to actually do anything. The calls to this method remain in place so future versions can perform the necessary checks, even if the current code does nothing.