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
Yes, the initial implementation of this class ALWAYS used ssh (through paramiko) to start services, because I figured it wouldn't be too much trouble to ssh into yourself (small overhead) for the sake of keeping the local/remote commands homogenous.

However, paramiko doesn't let you ssh into 'localhost', so we ended up implementing this "ShellClientFactory" that doesn't guarantee that it'll be a remote host.

And now, we don't even use paramiko anymore, so we could technically go back. Ugh. But sure, lets say "DeployedMasterService", that's a better name anyway.

#historylessson