Small fix to prevent null pointer exceptions on collection name when performing an inline map-reduce
Added an undefinedCodec to deal with getting BSONType undefined fields from the server.
Changes from codereview - updated the UndefinedCodec to read/write an Undefined type to prevent us using null values.  Added a unit test and Javadoc too.
Changes from codereview - updated JavaDoc comments again.
Fixed test so that it works under 2.4
Curse you, unused imports!  Who's idea was that? (it was mine)
Added CollectionHelper

So operation tests can rely solely on operations
Added async helper methods that can take a connectionProvider
Async Index Operations

Added an executeAsync to the CreateIndexes, DropIndexes and GetIndexes operations
Added executeAsync to User based operations

Added abstract base BaseUserOperation class
Updated CreateUserOperation
Updated DropUserOperation
Updated UpdateUserOperation
Updated UserExistsOperation
Added GetCollectionNamesOperation
Added executeAsync to FindAndRemoveOperation
Added executeAsync to FindAndReplaceOperation
Added executeAsync to FindAndUpdateOperation
Added executeAsync to GetDatabaseNamesOperation
Added executeAsync to GroupOperation
Updated executeAsync for InsertOperation
Added executeAsync for map reduce operations
Updated RemoveOperationSpecification to use helper and test async
Updated UpdateOperationSpecification to use helper and test async