Added perform_search(), queryset support

I need to use the search string elsewhere in my view, so find it easier to pass that directly to the search function. I have therefore moved the search code into ``perform_search``, which ``generic_search`` now calls.

I also need to search querysets rather than all model objects, so ``perform_search`` now tests to see if it has been passed a queryset, and only uses ``model.objects`` if it has not.

Also updated the docs and tests to reflect changes.