Abstract creating `TCPServer` in module, cleanup `listen` method

This cleans up the main interface for a `DatTCP::Server` and
moves the details of creating a `TCPServer` into a utility module.
This also moves the useful, but long, comment with the utility
module. This is to improve the readability of the code and make
it easier to understand the interface for a `Server`.