Deep processing of cancel() for Piecewise() instances.

Now cancel(Piecewise((e1, c1), ...) returns Piecewise((cancel(e1), c1), ...)

Fixes issue 3923: Calling cancel() on a Piecewise() instance.
http://code.google.com/p/sympy/issues/detail?id=3923
Less trivial test.
Merge pull request #2250 from jrioux/piecewise

Deep processing of cancel() for Piecewise() instances.