make sure nonzero.is_complex is True
make all NaN is_* properties None -> False

I believe the answer to S.is_Q should apply the following logic:

if no part of S is in Q:
    return False
if all parts of S are in Q:
    return True
return None

So S.NaN.is_positive should be False: NaN never appears amongst
the postive numbers in the same way that S.NegativeOne never
appears amongst the positive numbers. Returning False has no
other implication about what the object *is*, only what it is not.
None should be returned in a case like Dummy(nonnegative=1).is_positive
since nonnegative might be 0 or positive.

Returning None means "I don't know, ask someone else." When expressions
which could lead to a NaN are encountered _eval_is_ routines should
return False instead of None
so that all routines should not have to be queried to determine
what the expression is. e.g. if an expression zero*unbounded is
encountered False can be returned and this should make it easier to
return a result for whatever attribute is being sought for that
expression.

Also make sure that NaN.is_complex is False.