Allow filtering of other querysets with .filter().

Added a method .filter() to the filter set which takes a queryset and
filters it according to the filter parameters in the filter form. The
existing filtering code is moved to qs property to .filter(), and the
qs property now uses this method. This allows the same single filter
set to filter multiple different queries, without altering the existing
behaviour.

The benefit of doing this over making new filter set instances with the
same form data is that the created and validated form and fields can be
reused for each filtering. This is more efficient, especially if
database queries were involved (which was happening in our case).

* Added test test_filtering_multiple_different_querysets.

* de-duplicated the ‘lambda o: o.username’ to by_username.