Fixed CSHARP-479. Deserialize method of the ArraySerializer(s) was not passing along the ItemSerializationOptions to the item deserializer.
added test for csharp 479.
renamed IBsonItemSerializationInfoProvider to IBsonArraySerializer. renamed IBsonMemberSerializationInfoProvider to IBsonDocumentSerializer.
Implemented CSHARP-477. Added more unit tests for MongoServer.
Implemented CSHARP-481. Added support for ContainsKey in LINQ queries.
Merge remote-tracking branch 'upstream/master'
added VB unit tests and fixed a bug in predicate translator.
CSHARP-480 - wix based installer for the driver
Fixing line endings for files that appear to have been added without setting core.autocrlf to true.
https://github.com/ray2k submitted pull request for adding ToLower/ToUpper.
minor refactoring.
added vb unit tests for the ToLower and ToUpper addition.
Some changes to how LINQ queries containing ToLower/ToUpper string comparisons are implemented.
Using a different query that always evaluates to false: { _id : { $type : -1 } }. This query is nice because it doesn't depend on the type of _id, because it works equally well at the top level or in an $elemMatch (whether the elements have an _id field or not), and as a bonus it uses the _id index when evaluated at the top level.
Merge remote-tracking branch 'upstream/master'
Improve deserialization performance by > 40% in the normal case and > 25% in the worst case.

Profiling showed that during deserialization, significant time was being spent in the following functions:
1. System.Type.IsAssignableFrom(class System.Type)	14.35%
2. MongoDB.Bson.IO.BsonBinaryReader.ReadBsonType() 11.46%
3. MongoDB.Bson.Serialization.BsonClassMap.GetMemberMapIndexForElement(string) 7.68%

This change addresses all 3 items:
1. Fixed by placing a quick type check before the hot path IsAssignableFrom calls. In most cases the types are equivalent which eliminates the call to IsAssignableFrom.
2/3. Most of the time in ReadBsonType is due to a call to ReadCString. All of the calls to GetMemberMapIndexForElement use the value returned by ReadCString. To improve this, I've implemented a trie (http://en.wikipedia.org/wiki/Trie) optimized for mapping input bytes sequences directly to result values specified by the caller. In the case of BsonClassMapSerializer, the trie directly maps the input binary UTF8 representation of element names to member map indexes. This completely eliminates all dictionary lookups, UTF8 string conversions, intermediary memory allocation, and does so in O(m) time where m is the length of the input string. Contrast this with the existing implementation where there are 5 (!!!) O(m) operations (1. Find the null byte, 2. Count the number of UTF8 characters, 3. Decode the UTF8 characters into a string, 4. Hash the string, 5. Compare the string the key in the hashtable bucket).  Additionally, I’ve factored the trie so any deserializer can make use of one when decoding to immediately switch to the correct state when decoding.

Additionally I’ve also implemented two other minor improvements:
1. Replaced the lookup table based GetLeastSignificantBit implementation in BsonClassMapSerializer with a binary search based one.  This is significantly faster on .Net because array accesses require an indirection and a managed bounds check.  In my own side by side testing, the binary search based one is 40-50% faster.
2. Added the readonly attribute to _declaredMemberMaps in BsonClassMap and cleaned up the initialization of this value. Minor improvement but the field is now consistent with _allMemberMaps and fewer copies happen during construction.