Fix error format
Fix calls to t.Fatal() which should be calls to t.Fatalf()
Fix unlocking mutex

We can't use defer, since that will keep the lock until the
function exists, while down the function we might need to lock
again, causing a deadlock.
Fix priting a couple of error messages

Use FPrint rather than Fprintf
Add a \n at the end of the message
Start services after starting the server and the config watcher
Lock before checking values in tests

Prevents data races
Cosmetic change
Refactor code to allow releasing locks with defer

This makes it less likely to end up with data race issues.
Add support for readline in the client

Use the dl package to open libreadline at runtime, if present. This
avoids having a dependency on readline, but makes use of its
functionality if present.
Try more library names when opening libreadline

Sometimes libreadline.so is not available, but libreadline.so.5 or
libreadline.so.6 is.
Cosmetic changes

Reorder imports according to goimports
Send a SIGQUIT to child process if the parent exists unexpectedly
Fix error format
Rename func type Monitor to LogMonitor
Don't unlock the start lock until the subprocess is started
Refactor to remove global variables

Create a Governator type, which stores a list of services
Add a test to log the the number of threads and goroutines used

Currently, we use multiple threads per service, since the waiting
causes a thread to sleep until the command returns and each output
stream (stdout and stderr) create another one. We aim to remove this
and instead use a fixed number of goroutines in the near future.
Major refactor in order to avoid n goroutines per service

Not all work is done, but we've actually laid most of the foundation.
Currently, the Governator type uses the Monitor type to listen for
SIGCHLD and avoids creating a goroutine per wait call. However,
os/exec still creates one goroutine per subprocess file descriptor
(one for stdout and one for stderr), so we'll have to avoid using it
in order to not create n goroutines per service.
When changing the service name, change the logger name too
Don't copy the Config in AddService

Correctly copying it would require copying the wd and the logger.
For now, let's just not make a copy and let the caller take the
responsibility.