A little more robust Oracle failover

We'll still have edge cases for sure. This is an attempt to:

- Listen for changes to the children of the Oracle leader ZNode so that the client can quickly and pro-actively connect to a different oracle (instead of waiting until a connection fails).
- Figure out if we have lost all Oracles so that we can update our state quickly and disconnect from current Oracle while waiting for new one to register as a leader.

What this ticket does not solve:

In the past, I've run into situations where a server itself can become disconnected from Zookeeper for a short period and not automatically requeue itself for leadership when it returns. I'll cover this in a different ticket.