Use watchers to initialize zookeeper

This change allows join to the cluster when ZooKeeper is not running. All initialize code will be run when ZooKeeper connection is established.