Text search

Adding text indexes and score sort.

There was a comment on Sort implying the following syntax:
```go
query4 := collection.Find(nil).Sort("score:{$meta:textScore}")
```
but I think it makes more sense to be coherent with the index syntax and do:
```go
query4 := collection.Find(bson.M{"$text": bson.M{"$search": "some text"}})
                    .Select(bson.M{"score": bson.M{"$meta": "textScore"}})
                    .Sort("$score:textScore")
```
Does that make sense?

It might be missing documentation. But I want to see if this might get accepted.
The whole logic around weight is not looking great. Too many result arguments, duplication, etc.

Let's implement this as part of the string itself:

    $text,weight=1:foo

That said, let's please do that in a separate pull request. Just elide all references to weight here, and let's get this merged sooner rather than later.