Implement CSHARP-451 (Improve deserialization performance by ~22%).

Deserialization CPU performance was suffering because both LookupDiscriminatorConvention and LookupSerializer were being called for nearly every class member. Both functions take out and release the global config read-lock. Profiling showed that around 22% of all CPU time was being spent in ReaderWriterLockSlim.TryEnterReadLock and ReaderWriterLockSlim.ExitReadLock due to these functions.
Fix makes the BsonClassMap and BsonMemberMap cache references to the appropriate IDiscriminatorConvention and IBsonSerializer instances. By doing this, lookups are avoided while maintaining semantic correctness due to the associated BsonClassMap and BsonMemberMap types never changing once constructed. Incorporated much feedback from discussion with Robert to simplify changes.

Other issues addressed:
1. BsonSerializer.Serialize had a bug where a class implementing IBsonSerializable would always be serialized using the IBsonSerializable implemention, even if the implementation was overridden by a registered IBsonSerializer.
2. Modified BsonSerializer to allow only one custom serializer to be registered. This prevents cache consistency issues when a serializer instance is cached within a BsonMemberMap.
Edited change logs.
Wrote 1.4.2 release notes.
Proofreading changes to 1.4.2 Release Notes.
Changes for packaging version 1.4.2.
BUMP 1.4.2.4500
Set version to 1.5.0.*.
Merge branch 'master' of git://github.com/optimiz3/mongo-csharp-driver into csharp451
Merged pull request for CSHARP-451 with changes. Restored explicit registration of default serialization provider. Registering a serializer for any type that implements IBsonSerializable is not allowed for performance reasons.
Implemented CSHARP-452. Improved speed of BsonClassMapSerializer Deserialize by using a new FastMemberMapFinder helper class that doesn't use HashSet.
Update CSHARP-452 (Improve deserialization performance)

    Robert and I had been discussing CHARP-4522 and we accidentally both implemented this separately. This merges the best parts from both of our work. (My original implementation can be found here https://github.com/optimiz3/mongo-csharp-driver/commit/f1652202981ff87c715caf9ca8777cf9718a65d4.)

    This change uses an O(1) bit array when determining which elements have been deserialized. One trick it uses is leveraging how .Net default initializes array values to 0 for the bit array. It also significantly enhances sparse structure processing.

    After running several tests I found this improved deserialization performance by an average 7% in the dense structure case and an average 27% in the sparse structure case over the current build in mainline.
Merged pull request 101 with one minor change and some added comments.
Update CSHARP-452

Fixes and adds a unit test to cover an edge case and where a readonly member not present in the input stream could result in an infinite loop.
Fixed CSHARP-229 (again). This time added better comments to help prevent bug from being reintroduced.
refactored attributes to be self-sufficient and moved code out of BsonClassMap into the attributes.
refactored IBsonSerializer to not be aware of identities instead opting for a more granular interface such that implementors of IBsonSerializer don't need to implement methods they don't use.
refactored IBsonSerializer to not be aware of members instead opting for a more granular interface such the implementors of IBsonSerializer don't need to implement methods that don't apply.
moved all static methods from BsonDefaultSerializer to BsonSerializer.
renamed BsonDefaultSerializer to BsonDefaultSerializationProvider and
removed all references to BsonClassMap.  created
BsonClassMapSerializationProvider.  Removed references to BsonClassMap
from BsonSerializer.
refactored IBsonSerializer to not be aware of items so that implementors don't need to implement methods that don't apply.