Harden against connection and server failures

I created a test harness using a `zk-server` cluster that sent alternating `SIGSTOP` and `SIGCONT` signals every 30 seconds to each zookeeper server in sequence to simulate random network failures.

The changes from this included:

* Make sure `zookeeper_process()` is called even if `rb_thread_select()` times out
* Fixing a bug in the apache zookeeper library (reported as [ZOOKEEPER-1756](https://issues.apache.org/jira/browse/ZOOKEEPER-1756))
* Upgrade to zookeeper 3.4.5 client library
* Only submit commands when the connection state is connected
* Prevent new commands from being submitted if the connection has expired

![travis-ci build status](https://travis-ci.org/zk-ruby/zookeeper.png?branch=zoomonkey)