Separate AsyncZooKeeper api from implementation

This will make mocking the interface much easier