consolidate exp._eval_power and Pow._eval_power

Consolidate exp._eval_power into Pow._eval_power as much as possible.

Details are given in the commit's log.

In master, the lhs is incorrectly reported with a negative of the rhs
```
    assert sqrt(exp(3 + I)) == exp(S(3)/2 + I/2)
```
these are not recognized of being able to combine exponents
```
    ((1 + I)**(I*pi/(2*log(sqrt(2)))))**(S(1)/3)
    ((1 + I)**(-I*pi/(2*log(sqrt(2)))))**.3
    ((1 + I)**(-I*pi/(2*log(sqrt(2)))))**(1/S(3))
    ((1 + I)**(-12*I*pi/log(sqrt(2))))**(1/S(3))
```
I see. In that case I agree that the floor is 0 or +/-1 for the given e and
b. But unless other is half-integer, the result of the exp correction will
never be +/- 1. Consider other=1/8.

Sent from my mobile phone.

In sympy/core/power.py:

> +            return Pow(b, e*other)
> +
> +        if e.is_real:
> +            if (abs(e) < 1) == True:
> +                return Pow(b, e*other)
> +            elif (e == -1) == True:
> +                if abs(other) == S.Half:
> +                    if b.is_negative is True:
> +                        return S.NegativeOne**other*Pow(-b, e*other)
> +                    if b.is_real is False:
> +                        return Pow(b.conjugate()/C.Abs(b)**2, other)
> +            elif (e != -1) == True and (abs(e) < 2) == True:
> +                if C.re(b).is_negative is False:
> +                    return Pow(b, e*other)
> +                elif C.re(b).is_negative is True:
> +                    return -Pow(b, e*other)

The small value of e is handled at the beginning of the if-block. At this
point 1 < |e| < 2.

—
Reply to this email directly or view it on GitHub
<https://github.com/sympy/sympy/pull/7638/files#r14860763>.