cluster: add support for sharded cluster configurations.

This does a first crack at the reconnection strategy for connecting
to sharded clusters. It is suboptimal in the reconnect case as it won't
reuse connections, but we can get to that later. It actually isn't a
big deal in the sharded cluster case since most uses will only connect
to one sharded cluster.

This includes some udpates to the testing code so that we can create an
entire sharded cluster with two replica sets.

We test with two routers (mongos) as well.