Rewrite to use the pure JS zookeeper client library

- [ ] The purejs `node-zookeeper-client` does throw when some unexpected things happen so some `try`s are probably needed in here.
- [ ] Fix tests / travis / the vm
Hmmm, yeah, all the order of operations inside state changes confuses me. why do you suggest that? when a state change message CONNECTED -> CLOSED is received, what should the recipient expect?