Separate the multiplexer from the socket code, this now allows us to use something other than epoll