Refactor processing of inequalities with oo

fixes #7775
fixes #7798
fixes #7841

this patch replaces #7800 and #7799
Oh I stand corrected. I tested it and it seems the integrator can handle it either way. 

Even so, they do seem to be mathematically different, and so the fact that this branch gives this now is concerning. Do we know why it does it? For instance, `integrate(-x*DiracDelta(x - x_2), (x, -oo, oo)).subs(x_2, 1)` gives an expression that is effectively `-x_2` and `integrate(-x*DiracDelta(x - x_2)*Heaviside(-x - oo), (x, -oo, oo))` gives an expression that is effectively `0`.