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
mostly to be safe against race conditions.
If the javascript engine executes
```javascript
this._zk.close();
this._zk = null;
```
and yields to another thread before doing
```javascript
this.changeState()
```
there's a window of opportunity for another thread to come in and attempt to e.g. acquire a lock.
Best case is you get a crash because this.zk is undefined, worst case you get undefined behaviour.