fixes #7899
Revert back Mul._eval_is_imaginary helper, as per 293606b
Fix tests (0 is NOT an imaginary!)
Adopt re/im/abs to work around (real*I).is_real is None
Adopt RoundFunction class to work around (real*I).is_real is None