It's bad juju and MSVC calls us out on it.
The whole point is to wake up the mx without waiting for the next safepoint derp
Although SIGINT still can't interrupt the current Factor thread in a sane way, this will at least wake up the run loop when waiting for input and fix #348 when implemented at the application level.
also factor out safepoint logic into its own file