Fix issue with child processes not being killed
Fix issue with child processes not being killed

This required several changes, because the code's fundamental model of
cleanup was wrong.

- Since the status server updates the supervisor with information about
  job stops via the shim, the server has to be able to wait for jobs
  stop notices to come in on its queue. This means that shutdown is a
  two-stage process: first, kill all running jobs, and then sit around
  and wait to know that they've all stopped.
- All the auxillary servers are stopped after the jobs are confirmed
  dead, since the event server must notify clients, and the status
  server is needed to receive updates on child processes.
- A set of running jobs, updated whenever one starts or stops, is kept
  so that the shutdown process can know when to stop waiting.
- Extra handling was added so that way jobs are not restarted if the
  server is in the process of going for shutdown.

adamnew123456/jobmon