Binary ineq like `<` should give same as functional forms `Lt`

Is this the right fix for underlying issue in pr #7783?

- [x] pass tests from #7783 
- [x] pass rest of `test_relational.py`
- [x] make sure non-evaluated but potentially evaluatable still works.  E.g., things like:
````
e = Lt(7,7, evaluate=False)
e.doit()
````
- [X] Make sure `e = Lt(x,y); e.doit()` takes same path.   update: it does.
- [X] consider removing `_eval_sides` from code, or make it specific to the Equality/Unequality.  Update: for now, I call it from `Expr.__lt__` (which may not be the "cleanest" given that its a `_` method.)
- [x] consider the broader test suite.
- [x] There is bound to be some fallout...  Update: surprisingly little so far, all changes local to `expr.py` and `relational.py`.
- [X] Consider: Could `lhs.__lt__(rhs)` return None?  `Equality` and `_eval_Eq` use this but `__lt__` is not a helper function so not sure its useful here...  Update:  current approach seems to be working.
- [x] Are any documentation changes needed?  E.g., should the docs contain something like my explanation of the approach given in the commit message?  No: there are comments in the code and the documentation in `GreaterThan` already implies `>` should be the same.
> But we know that the `dif` is real, isn't?

Good point.  Will clean up further.

> Then we should investigate this.  The `equals` is expensive.  It
> seems strange if we should call this for every comparison.

1. If `equals` can decide inexpensively it should short-circuit before
doing the expensive tests.  If not, that's an issue.

2. This is *not* used on every comparison.  Its supposed to be a
last-ditch effort before we give up and return unevaluated.
For example, see new #7981.  Without the isequal(0) stuff, I only fail
a few tests, (norm stuff in sympy/matrices/tests/test_matrices.py).