Stop running containers instead of killing them on undeploy.

The reason that TaskRunner has a thread was to allow for a synchronous and blocking programming style when interacting with the docker daemon while ensuring that manipulation of different containers did not interfere. I now think that was both overly defensive and optimistic wrt to the concurrency capabilities of Docker.

I want to get rid of both the Supervisor and TaskRunner threads and have the single Agent reactor thread do all docker daemon interaction synchronously. If a slow pull happens to block starting another container, so be it. For purposes of automatically restarting containers when they crash we should probably just configure the docker daemon to do that now that it has grown that capability.