We have a custom interface called `IMongoQueryable` that derives from `IQueryable`.
The intent of this interface is to limit applicability of our custom extension methods to `IQueryable` instances known to be LINQ queries against MongoDB.
Most LINQ providers don't do this. They just define their custom extension methods against `IQueryable` and limit the visibility of them by putting them in a separate namespace.
So for example, if we defined our custom extension methods against `IQueryable` they would only be visible when adding a `using MongoDB.Driver.Linq` statement.
Supporting `IMongoQueryable` as a separate interface from `IQueryable` reequires some awkwardness (see `MongoQueryable.cs` in particular). Things would be a lot simpler if we just stuck to `IQueryable` like other LINQ providers.