move search method from manager onto a custom queryset class

Putting the `search` method on a custom queryset class makes it more flexible when you need to combine the `SearchManager` with other custom managers and allows you to chain the `search` method with methods from other managers, eg in my project I can now do:

```
class MyCustomQuerySet(SearchQuerySet, OtherQuerySet):
    pass

class MyCustomManager(SearchManager, OtherManager):
    def get_query_set(self):
        return MyCustomQuerySet(model=self.model, using=self._db)

MyModel.objects.custom_method().search('blah')
```