Refactor launch_server code into supervisor.py

This makes the role of supervisor.py a bit more explicit.
All functions and classes that are geared towards creating
and destroying individual servers have been moved to supervisor.py,
leaving controller.py for the more abstract autoscaling operations.