optional predicate step in reweights

Due to a new requirement of my analysis, I need to plot my signals after two incompatible cuts, so I have added a predicate in this step for convenience.  The theme of predicates could be expanded, for example, I can imagine a more general "steps.other.predicate" step, taking a step to execute along with a "temporary cut" step as a predicate.  We originally designed supy purposefully with linear cut-flow, due to conceptual and coding simplicity, and those reasons may still apply.  Feel free to merge this branch or expand on the theme.