Normally I'd have this background threading to keep the GUI thread from being blocked. But in this case, it blocks the window from opening/shifting and displaying a black empty screen in the meantime
Log collection moved up to MainWindow. Since there will be many sub-VMs moving forward, a singleton based setup was desired. RxUI's Splat was an option, but we already had Utils.Log right there. Also now GUI printed messages will go to the log on the disk for later inspection.
Since WorkQueue is static itself, just put it in the main vm. If it ever gets made into a non-singleton, might refactor installer and compiler VMs to each have work queue systems