fu upgrades

xreplace does top-down replacements so replacing Adds with 1
would give 1 for the following rather than 0

	(x - x*(y + 1))

if replace acts on the arg of a function it doesn't also
act on the function, so replacing tan with sin/cos changes
tan(tan(x)) to tan(sin(x)/cos(x)) but does not change the outer
tan.

For the above two reasons, a custom bottom-up traversal of
expressions is used for most fu routines.

==========

correct TR8 rule and use recursion in TR8 if new products
were introduced.

TR9 and TR10i have a custom matching routine that sorts
arguments by coefficient (and then perhaps by free symbols)
to help prune the possible pairs to consider for combination
down to a smaller subset. The is informed by the work of Mario
Pernici whose TR10_inv was the one against modifications were
tested.

===========

function docstrings and a module docstring were edited.

The simplify_utils of Mario's is here though that could be
removed (and it contains things like random_expr that could
probably be removed or made into private functions).

=========

To avoid recursion errors, when fu is being used, calls to
fu are suppressed by passing fu=False to simplify from TR0.

TR10i or TR10_inv (now in use) can be used in trigsimp.
L returns Integer; fix typo
add is_zero and is_one properties to Factors
check numerator for double angle rule
use TR10i instead of TR10_inv
3516: Rational gets own gcd and lcm methods
keep common starting rv values