8296: fix nroots ordering
modify 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 are made.

Sorting is a slow operation and was added to get consistent results
from these routines (all roots_foo in polyroots). Now that Add's args
are not sorted by hash this is no longer an issue, so sorting is
now a private option to these private functions but is left True.

TODO remove sorting from all routines (issue 8294).

An advantage to not sorting is the freedom to fail to return items
in any sorted order. Nonetheless, when the domain is ZZ the roots
will be sorted (reals first, then non-reals according to real then
imaginary parts) and that is what is important to _roots_trivial.
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!
8285,8289: further refine complex intervals while sorting

Polynomials having complex roots with a real part of 0 have
to be handled separately since they will never become horizontally
disjoint from each other. The only way that a pure imaginary root
can occur is from a binomial factor. For ax**2 + b the roots will be
imaginary when a*b > 0 and for ax**(2**i)+b for i > 1 two roots will
be imaginary if a*b < 0.