consolidate exp._eval_subs and Pow._eval_subs processing

The logic for _eval_subs has been consolidated as much as possible
between exp and Pow. There were things that the one was doing that
the other was not. In addition, the decision about whether to make
a certain substitution or not is more limited in scope: one should
not obtain an expression which is not supported by the power laws.

e.g. exp(2*x).subs(exp(x),y) -> y**2 but if the exp(x) is exp(3*x)
then the substitution will fail since exp(x)**(2/3) != exp(2*x/3).