implemented _eval_is_zero on Pow

fixes #7965
```
0**(not real and not imaginary) -> Nan => None
0**oo -> 0 => True
0**(-oo) -> zoo => None
0**zoo doesn't evaluate -- what should it be?
0**bounded -> 1 if bounded==0 else 0 => False if bounded==0 else True

S.Half**oo -> 0 => True
S.Half**(-oo) -> oo => False
S.Half**zoo -> unevaluated


S(1)**(+/-oo) -> NaN => None  # same as wolframalpha
S(1)**zoo -> 1 => False  # if the above is NaN sure seems like this should be, too
S(1)**(I*oo) -> 1 => False # ditto
S(1)**(-I*oo) -> 1 => False # ditto

S(2)**oo -> oo => False
S(2)**(-oo) -> 0 => True

oo**oo -> oo => False
oo**(-oo) -> 0 => True
zoo**(-oo) -> 0 => True
zoo**oo -> zoo => False
```

The following produce errors:

```
oo**zoo -> recursion error
oo**(1+I*oo) -> recursion error
oo**(oo + I) -> recursion error
>>> Rational(-1,2)**(-oo)
AttributeError: 'NegativeInfinity' object has no attribute 'q'
```

It seems like some cleanup of Pow's eval method should be done first.