add _Query class
add ReadPreference class and _HasReadPreference consumer role
add WriteConcern class
add types and coercions; also tidy _Types file
enhance _Server to support server selection
enhance _Link for server selection

- adds link metadata (ismaster) used during selection and operations
- improves thread/fork safety
- eliminates weak-reference approach for thread safety

Temporarily skips some thread tests until server selection is implmented
improve Error.pm for server selection and new protocol code

- Adds ProtocolError class
- Adds code attribute to DatabaseError
- Tidies code
Improve WriteResult

- allow CommandResult as input to parse
- add assertion methods to centralize error throwing logic
add optional max size argument to encode_bson
improve CommandResult class

- Add assertion method
- Add source server address attribute
switch bson.t to subtests for output clarity
run all test files recursively, always
Implement new server selection logic and centralize operations

These commits implement the new server selection logic based on
the cluster state as maintained by the _Cluster class.

All database operations are centralized into two places:

- the _Client role has methods that take a server link and an "operation"
  data structure of a given type and dispatch the operation using the
  BSON encoder/decoder and the wire protocol

- the MongoClient class wraps the _Client role methods to select a
  server of an appropriate type

Previously, database operations were scattered around the codebase,
with multiple place encoding BSON, constructing strings for the wire
protocol, dispatching over a socket, and reading results.

These changes also move toward more consistently throwing error objects
when errors occur, which is part of the eventual roadmap for
rationalizing error handling.

Tests have been updated as necessary.
update devel tests for new server selection code
PERL-379 Implement server-selection and new read preferences