Rewrite to use the pure JS zookeeper client library

- [x] Fix tests 
- [x] travis 
- [x] the vm

> The purejs `node-zookeeper-client` does throw when some unexpected things happen so some `try`s are probably needed in here.

^ This is not plausible unfortunately. There are about 40 places where this can throw if zookeeper does something unexpected. Not sure how much of an issue this is.
wfm. my nit was mostly a general pattern thing, which i believe is valid in any programming language along the lines of "always perform the operation on the current object before marking it as processed", if that makes sense.
Your added safeguards are a good idea too.