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 `std::array<char, 4 * 1024> format_buffer;` vs `char format_buffer[4*1024];` ... if there's no reason to waste characters, I prefer going with the shorter one :p