Support for automatic query routing and dataset discovery.  When
configured with a list of possible secondary instances, we will
randomly query all the servers to build information about which
servers do and don't have the dataset.  See SecondaryInstanceSelector
for a description of the algorithm used.

The goals of this initial version are something that is relatively
straightforward and understandable that can be extended as it proves
necessary.

This also has basic support for detecting that we got a bad response
and flagging that secondary for a re-check before using it again,
but this is lacking in a few areas.  The current finishRequest flow
control needs some changes to be able to more easily and accurately
detect various classes of errors, I'm not sure if we are even
properly processing various underlying failure scenarios right now,
and we need to integrate with some form of "instance down" detection
(Curator or otherwise) and possibly consider automatic retries in
some scenarios.

Note that this code is currently doing a get schema call to discover
if a secondary has a dataset, then throwing the result away.  When we
build a per-secondary-instance schema cache then we could interface
with that.