Hugely refactored, but the filters are backwards compatible with the previous version.

The big change here is that the default values are set in a single method, rather than with a half-dozen individual filters. That saves having to test `is_singular()` each time.