Fixed a bug in BSONBinaryWriter.pipe when used to pipe a document that is a field value of another document.
Created BsonDocumentReader class that supports a BsonDocument as the source of a BSONReader.
Added missing Copyright
Changed CollectibleCodec interface to have three methods, so that it doesn't have to return the existing id unless needed.
MongoCollection now has a Codec property instead of a CollectibleCodec property, and does instanceof check on it as necessary.
All driver tests passing with BsonDocument-based Operation and Protocol implementations
Fixed bug in DistinctOperation, which was assuming that all the values are strings.
driver-compat tests all passing except for field name validation
Added field name validation to BSONBinaryWriter, and move reponsibility for validator configuration from Codec implementations to the various RequestMessage subclasses.
Added exclusion of $db, $ref, and $id to StorageDocumentFieldNameValidator to support special DBRef type
Fixed DBCollection.update so that it relies on ReplaceOperation or UpdateOperation as appropriate.