sort roots in roots_binomial and roots_quadratic

These two routines supply roots to _roots_trivial which expects
the results to be in the same order as the RootOf instances. Although
the sorting could take place in _roots_trivial, all the information
about the roots is in these routines so it makes sense to sort them
in that information-rich context. In order to keep this fast, no numerical
calculations were made.
cache _roots_trivial

Without caching, the roots have to be recomputed each time a new
indexed value of a RootOf instance is requested.
reverse roots in inequalities; add tests
Add Michael Gallaspy to AUTHORS/aboutus. Welcome to SymPy!
simplify quadratic solution
modify error message [skip ci]

Although RootOf and roots can support EX domains, sorted
roots (as from real_roots and all_roots) does not. This limitation
guarantees that the roots will be orderable since decisions about
ordering of trivial roots (quadratic and binomial) will only depend
on determining the sign of Rational quantities.

>>> p
Poly(sqrt(2)*x**2 - x + 1, x, domain='EX')
>>> RootOf(p,0).n()
0.353553390593274 - 0.762959226424681*I
>>> RootOf(p,1).n()
0.353553390593274 + 0.762959226424681*I
>>> print filldedent(roots(p))

{sqrt(2)/4 + sqrt(2)*sqrt(-4*sqrt(2) + 1)/4: 1, sqrt(2)/4 -
sqrt(2)*sqrt(-4*sqrt(2) + 1)/4: 1}
>>> p.all_roots()
Traceback (most recent call last):
...
limit sorting of quadratic and binomial roots to ZZ

The sorting that is being done in roots_binomial and roots_quadratic
is only being done to make sure that the RootOf instances for these
be correlated with the returned values. When the domain is ZZ then
the various tests of signed quantities is guranteed to not fail since
they involve determining the sign of a Rational. For anything more
complicated, there is no need to sort at this private function level
so we resist the temptation to do so even if we can (e.g. the tests
added seem simple enough and the roots *could* be sorted but there
is no need to do so and no guarantee that the assumptions system will
always be able to handle more complicated numerical expression).
calls to roots_quadratic and roots_binomial must request sorting

Now the methods used to sort for _trivial_roots may fail with
impunity because there is no gurantee that the roots will be
sorted in any way by these routines unless the _sort flag is True.
check for trivial roots before attempting factoring

Although it is easy to order the binomial roots, if a binomial is allowed
to factor then the procedure to order the roots is time consuming and can
fail.

>>> Poly(a*x**n+b,x)
Poly(-4*x**8 + 1, x, domain='ZZ')
>>> factor(_)
-(2*x**4 - 1)*(2*x**4 + 1)

If the all_roots is called on the Poly, an error will ensue:

NotImplementedError: 2 element rule