This functionality seems to be 1) important and 2) where the vast majority of the complexity is introduced. In particular, it's what seems to necessitate `backtrack`, because you can work yourself into a corner where you can't actually satisfy the constraint.

I'm willing to bet that there's a way to do this more cleanly -- I'll think on it a bit.