Create a server from file descriptors and retrieve a servers file descriptors

This exposes methods for retrieving file descriptors of servers and queued connections. It also updates the `listen` and `run` methods to support being passed file descriptors. The `listen` method can take a single arg now that will be interpreted as a file descriptor. The `run` method can optionally be passed an array (as the last arg, because it will pass the other args to `listen`) and it will assume these are client socket file descriptors. These will be added to the queue before any new connections are loaded.

All of this is to allow a server to hand off it's file descriptors so another server process can rebuild it's state and serve the connections. Basically, to support a hot restart.