WIP for review

This has a bunch of ideas I'll document inline
I've basically given each rule helper a sensible default constraint.

Aside:I think the rules with constraints should required it at construction time.