Test a bug in Piecewise._eval_subs
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
replace has exact option to override old matching
Merge pull request #2062 from smichr/replace

modify replace to truly act from the bottom up
Piecewise._eval_subs doesn't use solve.

Also, the checksol is moved to _eval_cond.
modify denoms to return all denominators
Use denoms(expr) instead of expr.as_numer_denom().
Merge pull request #1944 from placasse/piecewise_eval_subs

Piecewise._eval_subs should not call solve.

There is actually two problems with this call to solve.
For some equations, solve doesn't return all solutions.
The second issue with solve is that it can be slow.
Merge branch 'master' into integrals

Conflicts:
	sympy/functions/elementary/piecewise.py
	sympy/integrals/integrals.py
	sympy/integrals/tests/test_integrals.py