Linq index

Couple of features for the Linq provider to make it more powerful, and more on par with the lower level API:

1. Explain extension method on IQueryable<T>

```
BsonDocument plan = 
    collection.AsQueryable<T>().Where(o=>o.Name == "test").Explain();
```

2. WithIndex extension method on IQueryable<T>, for index hinting. Can take a string or BsonDocument:

```
collection.AsQueryable<T>().Where(o=>o.Name == "test").WithIndex("foo").ToList();
collection.AsQueryable<T>().Where(o=>o.Name == "test").WithIndex(new BsonDocument("Name",1).ToList();

```