Restartable reactor

Currently `IoReactor` cannot be restarted, but that's mostly because I've been lazy. This tries to add tests that make sure things are properly clean up before a restart and implementation that isn't too complicated (but there's a few crazy things like calling the error listeners).