dsolve: Handle integrals expressed in terms of Piecewise.

Fixes the test_ode failure.
Piecewise._eval_interval for cond. indep. of integration var.

This fixes the Integral of a Piecewise when the conditions are
independent of the integration variable.

Before:

>>> integrate(Piecewise((0, Eq(y, 0)), (x*y/sqrt(y**2), True)), (x, 1, 3))
4*y/sqrt(y**2)

After:

>>> integrate(Piecewise((0, Eq(y, 0)), (x*y/sqrt(y**2), True)), (x, 1, 3))
Piecewise((0, y == 0), (4*y/sqrt(y**2), True))
Add correct assumptions in tests and docstrings.

Since there is no way to assume b > a, we will have to do with
assuming that a is negative and b is positive.
Identify special cases in symbolic heurisch integration.

A wrapper around heurisch that checks if the antiderivative
contains poles, reevaluates the integral at those poles, and
returns a Piecewise.
Add tests for issue 1428.
Fix the integral of x**y w.r.t. x

Don't assume the exponent y != -1. Return a Piecewise instead.
Fix the integral of x**y w.r.t. y

Don't assume that the base x != 1. Return a Piecewise instead.
Fix the integral of exp(n*x) w.r.t. x

Don't assume that the factor n != 0. Return a Piecewise instead.
Fix the integral of cos(n*x) and sin(n*x) w.r.t. x

Don't assume that the factor n != 0. Return a Piecewise instead.