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)])
```
how this cacheit affects your timings?