Updated controller code to support multiple controllers

With this design, the config file is a client instead of a state, stdin can be a client,
and we will be able to listen on a unix socket for more clients.  This allows the
controller script to be a plain service, and not need any special handling.  If needed
there could still be a magic file descriptor name that creates a controller pipe when
used so that simpler scripts can still use stdin/stdout instead of unix sockets.