factor gets deep flag

This is documented in the docstring with an example.
upgrade solving for abs, powers, and real/imag variables

Also:

    use powdenest before factoring in _tsolve

    fix detection of difference of functions
add bivariate solving to solvers
edits after coverage check
modify preprocessing for lambert
remove use of match from _tsolve

XXX not sure why the ode test_linear_coefficients changed
add symmetric lambert detection
use deep option with factor
remove some indeterminism from solve
update ode tests
make trig rewriting more robust in solve
2830: add more aggressive testing to checkodesol
use logcombine in _tsolve
modify doctests and tests for ode
try avoid recursion in _tsolve

Before these changes a hash-dependent failure would occur:

didn't have recursive error in drv_types.py doctest
    architecture:       32-bit
    cache:              yes
    ground types:       python
    hash randomization: on (PYTHONHASHSEED=380265779)

did have recursion error:
    architecture:       32-bit
    cache:              yes
    ground types:       python
    hash randomization: on (PYTHONHASHSEED=1110671673)
3845: remove indeterminism in constsimp

also implement a more compact passing of args in constantsimp

unfail tests that now work in test_ode.py
use force with solve in dsolve

A marked test generates a PolynomialError since
the general quartic solution cannot be returned
so the PolynomialError is now caught in the try.
solving of trig functions gives 2 (of infinite) solutions

The solving of trig-related frunctions is no longer treated as
a simple inversion in the case of sin and cos so that multiple
solutions are now returned. wester tests have been un-XFAILED to
reflect this change.
reorganize inversion handling; sort _tsolve results
rewrite hyperbolics unconditionally; inverse defined only for monotonics

inverse should be defined only if there is a single inverse for a given
value. sin(x) = 1/2 has 2 values per period and thus does not have an
inverse defined; tan(x) has a single value per period and has an inverse
defined. This attribute is used in the _invert function to algebraically
isolate the variable of interest. Functions with more than one value should
be handled in _tsolve or elsewhere.