Rewrite fuzzy_and

It now only takes *args (not an iterator), and allows empty arguments.
Add fuzzy_or
Fix fuzzy_and(i for i in things) to fuzzy_and(*(i for i in things))
Add zero predicate to the new assumptions system

Even though zero = ~nonzero & real exactly, this ended up being more work than
it should have been.
Merge branch 'nonpositive' into assumptions