Introduce an interface for list filters and use that in place of the enum

Refactor some of the code to make the naming a little less confusing.