Filter events before performing iteration
A filter can be supplied to the maximal subset
iterator to remove events from consideration in
maximal subsets. Instead of needlessly processing
events that will never be considered, we can
instead remove those events at the beginning while
perserving the relative ordering among events that
we do actually care about. This both simplifies the
bookkeeper's code slightly and reduces the number
of times we need to invoke the filter function drastically
(once per event instead of multiple times per combination).