Add .Explain() extension method to IQueryable<T> to explain Linq queries.

The extension method operates on IQueryable<T> and can therefore not operate
on .Max, Min, First, Last or any methods that return a scalar. It can also
not operate on .Distinct queries since they call a specific method on the
collection and don't give us access to any cursor.
Added .WithIndex method to Linq queries for index hinting.

.WithIndex can take a string or a BsonDocument as an index hint.
It's an extension method on IQueryable<T> and returns IQueryable<T>.
Example:

var results = _collection.AsQueryable<T>.WithIndex("foo").Where(x=>x.Name == 1).ToList()
CSHARP-667, CSHARP-668: added Explain and WithIndex extension methods.