XD-1580: Undeploy modules when ZK disconnects

In method `registerWithZooKeeper`, the module deployments cache is started before saving the container attributes. This way if there is an exception thrown while saving the attributes, the deployments cache is not affected.

At some point we may want to consider trapping exceptions from this method, or perhaps even shutting down the ZK connection if an exception occurs. I was seeing a `NodeExists` exception for the ephemeral node created by this method, but that exception seems to have gone away with the other changes in this commit.

In method `onDisconnect` the modules are now undeployed when the connection to ZK is lost. This is desirable because the admin leader will try to redeploy those modules on another container.

In `StreamModuleWatcher` and `JobModuleWatcher`, instead of blindly setting the watch on every non-delete event, the watch is only set if the connection to ZK is established. This change seems to prevent the exception described above in `registerWithZooKeeper` although I don't understand how they are related.