Adding gridfs support

Implements gridfs support in libmongoc

o mongoc_client_get_gridfs
o mongoc_gridfs_create_file_XXX
o mongoc_gridfs_file_(read/write/seek)
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.
Merge branch 'gridfs'

Conflicts:
	mongoc/Makefile.include
cluster: wire version must be negotiated among all peers.

We cannot maintain a wire-version per-connection. It should be negotiated
among all of the cluster peers. If any of them do not fit into the shared
range, we must fail the entire cluster.
bulk insert and IOVEC_ARRAY_FIELD rpc type

added in mongoc_collection_insert_bulk (that takes an array of bson_t
pointers and inserts them as part of one bulk insert.

to support this, added in a mongoc_collection_insert_bulk_raw, which
adds via a struct iovec *

to support that, added in a IOVEC_ARRAY_FIELD rpc type, which allows for
arbitrary trailing binary data

Also, added in actually reading the gle reply for inserts to catch
things like unique key violations.