Refactor processing of inequalities with oo

fixes #7775
fixes #7798
fixes #7841

this patch replaces #7800 and #7799
> this issue doesn't matter here, we only return r if it's a BooleanAtom.

I was worried recursion: `a >= infinity`, so we call `infinity <=
self` but if Python flips it to `a >= infinity`... recursion.

Maybe I'm being paranoid, ignore if you wish.