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.

To help reviewsers, the change was very carefully only made up of the following operations:

- moving code from controller.py to supervisor.py
- updating references (including in docstrings) to things in supervisor.py to use their new name in controller.py
- updating imports and linting things
- controller.py used direct imports instead of module imports, so I've updated some of the moved code to use names directly instead of module-qualified names.