daemon: Provide caller syncronization for quitting the daemon

Quit control messages are a bit strange because the daemon will quit
shortly afterwards.  There are three syncronization issues here.

1. We need the response to be written right away, because if
   we wait for the main loop it might not be written.
2. Callers may want to wait for the daemon to exit, so keep the
   socket open until we do.
3. Prevent additional connections on the control socket.