New logging system

This PR revamps the logging system, re-writing it entirely. The code has pretty extensive documentation (I hope) but here are the highlights:
 - Multi-threaded logging, avoiding excessive logging from slowing down the emulation as much. (Especially on Windows where console writes are slow.)
 - Nicely trimmed paths relative to the source directory, without the source repository prefix.
 - Completely re-organized severity levels and log classes, with documentation providing guidelines for use of each class which should prevent misuse.
 - All the logging statements in the code have been updated to follow the new guidelines.
 - Runtime-configurable filter (currently read from the configuration file) allowing configuration of the log levels for each different log class.
 - Possibility of future extensions to support logging to the GUI or silencing of spammy log messages. (Planned for future PRs.)
It doesn't take any string length argument because it doesn't need any. The returned string is a suffix of the passed in `path`, as stated in the doc-comment.