Raise WTimeoutError for wtimeout error PYTHON-575

PyMongo defines a TimeoutError exception, added in PyMongo
1.8, that is supposed to be raised if the server returns
a wtimeout error for inserts, updates, or removes. This error
has not actually been raised by the driver since MongoDB 1.8,
which changed how wtimeout is reported by the server.

This commit fixes the problem by raising a new exception,
WTimeoutError, instead of OperationFailure when the server
returns wtimeout. WTimeoutError is meant to distinguish this
particular error from other "timeout" errors handled in the
driver. It inherits from (now deprecated) TimeoutError to support
applications and libraries that already catch TimeoutError.

PYTHON-576 will add the server error document to OperationFailure
and subclasses (e.g. WTimeoutError), which can be used to check
return values like 'n', 'updatedExisting', and 'writtenTo', even
though wtimeout error occured.
Add error_document to OperationFailure PYTHON-576

This change adds an error_document attribute to
OperationFailure and subclasses. The error_document
attr will be the complete error document returned by
the server, when available. The error document may
include valuable information other than just the error
message, particularly when connected to mongos, which
may return one or more error subdocuments representing
errors on multiple shards.