Code review of event loop and thread pool

This is the result of an attempt to make the whole utilrb test suite pass. In the process, I've done a complete rewrite of the ThreadPool and EventLoop test suites to update them to a more "modern" spec feel *and* completely remove their reliance on timing. This has helped me find a bunch of issues that I've fixed in the code.