[WIP] NaN inequalities should raise TypeError

See PR #7776 for discussion.

 - [x] NumberSymbol needs special case.
 - [x] `oo` needs special case.
 - [x] `Float` needs special case.
 - [x] 'Rational' works as is (as existing special case).
 - [x] lots of asymmetric results: IMHO we really do want *lots* of tests, not just spot tests, sorry @smichr!
 - [x] All of this is for the binary ops, `Lt` is not tackled, that is pr #7783.
 - [x] clean up tests, test comments
 - [ ] couple FIXME's (probably relating more to pr #7783.)
 - [ ] rebase, squash
I had to test for NaN's in `Expr.__gt__` anyway, so is it better to just call `Expr.__gt__` here?  That way, its only in one place.

But OTOH, surely this type of special casing is better done *here*, in the NaN class.

Thoughts?