Properly report which RPC has failed in HasFailedRpcException.

Under certain failure modes, the current code would make an RPC
fail with an exception that claims that it's a `getClosestRowBefore'
RPC that failed, because the META or ROOT lookup that was required
to serve the RPC the user actually wanted to send failed.  This
complicates error handling for the user, as it's more convenient
for them to get a reference back to their own RPC so that they can
retry it if they want to.
Fix a small race condition when looking up the ROOT region.

There was a check-and-act sequence on the ZooKeeper object
without acquiring the appropriate lock, which means that
we could potentially cause a NullPointerException while
retrying to lookup ROOT.

Also move the ZooKeeper callback into a real class instead
of an anonymous class.
Support for multiple connections per region.