UnXFAIL an XPASSing pretty_sum test
Use binding = prettyForm.MUL in several classes' printers

This makes the classes be parenthesized when used in a Pow.  This is an
alternate fix to #1788.  I changed Integral, Sum, Product, and Derivative. In
general, any kind of operator should use this, since it is printed like the
operator *times* the operand.

Also remove the special casing in print_Pow from #1788, since it was incorrect
in light of the existence of the binding settings.

This is a better fix of issue 3260.
Fix the baseline for Piecewise printing

This fixes part of issue 3354.
Add new prettyForm binding, OPEN, which parenthesizes in Add

This is useful for things like Piecewise which need to be parenthesized even
in Add.

There is code in _print_Add that handles negatives that should probably be in
prettyForm.
Pretty print Piecewise always using parentheses

This changes the binding to OPEN, which causes it to parenthesize whenever it
is in an Add, Mul, or Pow.  This results in much easier to read expressions,
especially when a Piecewise is in an Add to the left of other terms.

This finishes the fixes of issue 3354.
Test a bug in Piecewise._eval_subs
recognize b**(1/log(b)) and b**(1/(log(-b)+/-I*pi)) as E

The random test added will affirm this identity every time tests
are run. I already ran it several hundred times without error. The
code in power.py tries to fail quickly if it is likely that the
base and exponent don't match the target expression.
modify replace to truly act from the bottom up

Previously, replace would not target any subexpression in which
subexpressions were changed, so x*(x*y + 1) would become x*(2*x*y + 1)
if all Muls were being multiplied by 2. Now 2*x*(2*x*y + 1) would be
obtained.

Add more explanations to replace's docstring.
patterns in replace succeed only if complete
give replace a simultaneous option
define hashable content for Subs, Lambda, Integral, Sum and Product

The new definition allows expressions that would give identical
results (indepenedent of bound variables) to compare the same.

Issues 2440, 3775
make Lambda variables Symbol, not Dummy
test and sympify Lambda input
minor ode cleanup

the global declaration of y was moved to the top of the function
and update the inline comments in _handle_Integral which no longer
apply

retlist processing was handled as a list comprehension
consolidate sum-like methods; disambiguate 1 and 2 arg limits

Product and Sum now use the consolidated _as_dummy method.
remove hashable content changes to Sum, Product and Integral
Merge pull request #2057 from smichr/pow-E

3788: simplification of powers
Merge pull request #2066 from smichr/fold

defining hashable content for objects with bound symbols
replace has exact option to override old matching
Merge pull request #2062 from smichr/replace

modify replace to truly act from the bottom up