minor: adding pry to the gemfile and creating a development group

* removing unnecessary/bad rubygems reference
* creating a development group for pry-nav and pry-rescue
* adding requires for pry unless not available
* setting travis config to exclude development group
Minor cleanup in pool manager
Cleanup rs and sharded clients of superfluous mutexes
RUBY-578 Put lock around mutation and reading of members in pool managers
RUBY-578 Set max sizes as an attribute on a node
RUBY-578 Only use one connect lock in rs and sharded clients
mongos expects read preferences to be strings, not symbols.

This should actually fix RUBY-542. Without this, using read
preferences with a mongos cluster that's backed by replica sets will
error with

  wrong type for field (mode) 14 != 2

This is raised by _extraReadPref in dbclient_rs.cpp, when it does:

  const string mode = prefDoc["mode"].String();

BSON type 14 (0xE) is the (deprecated) Symbol type, and type 2 is
String, so this indicates that mongos is getting a symbol when it
expects a string.

The sharding tests passed either way because they don't actually
construct replica sets for the shards, and _extractReadPref is only
used by DBClientReplicaSet. Thus, the $readPreference field passed to
mongos is completely ignored by the test mongoS, and not even parsed.
trivial: adding .ruby-gemset to gitignore
cleanup: refactor, making check_is_master a public instance method
RUBY-560 fixing issue with check_connection_health with auth enabled

Calls from `ShardingPoolManager#check_connection_health` to `client['config']['mongos']` were failing when auth was enabled. Access to this collection requries an authenticated admin user.

In addition, the previous approach of comparing the seed list to the contents of the `mongos` collection was fundamentally flawed since MongoDB keeps every `mongos` that has ever connected to the cluster in that collection (even long gone, inactive `mongos` instances).

We're now simply calling `isMaster()` on each mongos to confirm that 1) it is active and reachable and 2) it is indeed a `mongos`. If either of these conditions are not true, we set `@refresh_required` to true and call close on the member.
RELEASE 1.8.6
Use the connect_timeout when checking out a new socket.

The utility of the connect_timeout is that it's much easier to set an
upper bound on the time a connect(2) should take than on an arbitary
mongo operation, so we can detect and react to failures or downed
machines more quickly. Thus, it makes sense to set it whenever we're
connecting to a server, even if it's not an initial connection.

Notably, without this change, mongo-ruby-driver with default settings
can hang forever after a reconfig where a server is removed from a
replset, if the old server starts blackholing traffic. With this
change, it will notice in 30s and reconnect to the remaining seed
nodes.