solver mods

In polys, a case leading to a recursive error was discovered and corrected.

In solve, the changes look more dramatic than they are. There is nothing new being done except that unrad is attempted later in the process (leading to significant speedups, fixing #8591) and `_tsolve` correctly handles expressions that should have raised a NotImplementedError.

In nsolve, an example in the docstring was added that shows how to use a different solver (rather than forcing the user to see the findroots docs) and takes the opportunity to tell about a limitation and workaround. A guard against the spurious keyword was added. Although there is no SymPy-wide checking of keywords, this particular keyword is one that is used elsewhere in SymPy and will lead to confusing results from nsolve as it is silently ignored.

minor changes to unrad's docs is made.

Ellipse is modified to handle of the case when no precision is given (and the general solution is desired).

A condition that should have raised NotImplementedError because of the `_tsolve` failure to handle an expression now raises that error.
This change allows 0 to come back as a solution when the recast equation is solved.