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's a sigil value indicating that the queue has been closed while a user was blocking on it. I can't think the name can be made clearer, and it's purpose is explained in the comment below.