More robust ZK watcher handling.
Heartbeat: use `connected?` rather than `ping?`.
maintain api for new zk_ functions

make everything private unless it must be public. we also
* kill the @should_exit parameter, which is ambigous
* force node creation during zk connection
* raise a RuntimeError if we cannot set a watch; there should be
  no way to recover from that
handle session expiry by failing fast

this will cause synapse to restart
Merge pull request #68 from airbnb/cleaned_up_session_expiry

Cleaned up session expiry