Improve the robustness of the deployment via a few methods:

- add retry logic for starting the master process
- shutdown existing slave services before the master service
- log an error when 'clusterrunner stop' fails
Just curious -- since we are starting a background process, could we make this command `async=False`? It seems like it would still return immediately (after the process was successfully backgrounded) but it would make sure to block until the command actually executed?