changes to Mul.is_* routines

fixes #7899 (see commit notes) and is an alternate (and would thus close #7909, too).
I don't think it's correct.  Consider, for example, `x*y*z`, where both `x` and `y` are complex, and `z` - a positive real number.  We can't return a False here, becouse `y` can be `c/x`, where `c` is a positive number.