zero predicate

I couldn't wait for you any longer, so I just did it.

The new assumptions system is not very smart. It doesn't do the kinds of deductions I would hope for it to do, and you have to duplicate a lot of logic in the handlers (which makes certain nontrivial things not work, because it requires the ability to tear apart the logic). Perhaps we should focus on cleaning up the new assumptions independent of the assumptions themselves (i.e., the underlying logic) first. I'll see what happens in my branch after merging this.