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. 

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.

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)])
```
you don't have test from that issue

In fact, we should have also test for Poly's of higher degree, where radicals will be combined with RootOf.  There is an example in #8256.