avoid thread leak by creating worker threads after we create socket

If we kill relay processes very early after they start we end up
with a thread leak report from thread-sanitizer.

Opening the socket before we create the worker pool fixes this
problem.

sayeth Borislav Nikolov:
Because open_socket does exit() if DO_NOT_EXIT is not passed.
So we first start the workers, and then if we can not open the
listening socket it will exit() and leave the workers unjoined,
resulting in a thread leak at exit.
reduce chain to one listener for now