Improve constant simplification for dsolve

Replaces #2988 
- Fixes constant-collision errors in dsolve for good
- revise tests for ode, cse, pde, and constantsimp
- Constant numbering starts with C1, unless specified otherwise
- Specific checks for common subexpression and linear simplifications
- lie_group method errors appear because of x = Symbol('x',real=True)
	We work around with x = Symbol('x'), which raises no errors.
- Extends cse (common subexpression elimination) to Piecewise,
	and does not rewrite Order terms
-  Poorly defined behavior of collect is causing problems internally
	which extra code is added to handle.
- Stop classifying some nonlinear ODEs as linear.
- allows `numered_symbols` to exclude some symbols
- `terms_gcd` handles Eq uniformly now