sort quadratic and binomial roots; reverse (don't sort) roots in inequality handler

-fixes #8235 - now that the roots are sorted, no additional sorting needs to be done
-fixes #8255 - this fixes the registry of roots when the radicals is True or False. 
-avoids issues like the NotImplementedError of #8285 (tests added) but does not fix that issue
-fixes #8289 - consistent sorting of all_roots
-fixes #8296 - sorting of nroots consistent with all_roots

No other private (i.e. not @public) routines are modified. These two are given special attention because the order of the returned roots needs to agree with RootOf instances because these routines are called from `_roots_trivial`. Roots are not sorted in `_roots_trivial` because it is much more efficient to do so at the point of calculation.

I think sorting was added when we sorted Add args by hash. Since that is no longer true, I believe all sorting of polyroots routines can be removed. This will make them all run faster but may require some tweaking once to get all tests in agreement with them. For purposes of this PR a `_sort` flag was added to the quadratic and binomial routines; all tests pass with that flag set to False but it is left True until issue #8294 is decided.

If agreeable this closes #8256 and includes and thus closes #8237

Some other minor code modifications were made in the process and are also included as discrete commits.

The modifications also result in the runtime being 50% less and 35% less for quadratic and binomial root calculations, respectively, based on the tests:

```
from timeit import timeit

sum([timeit('[rq(Poly([r() or 1,r(),r()],x))for i in xrange(1000)]',
'from sympy.polys.polyroots import roots_quadratic as rq\n
from sympy import Poly\nfrom sympy.abc import x\n
import random\nr=lambda :random.randint(-10,10)', number=1) for i in range(5)])
sum([timeit('[rq(Poly((r() or 1)*x**abs(r() or 1)+(r() or 1),x)) for i in xrange(1000)]',
'from sympy.polys.polyroots import roots_binomial as rq\n
from sympy import Poly\nfrom sympy.abc import x\n
import random\nr=lambda :random.randint(-10,10)',number=1) for i in range(1)])
```