Improve Add/Pow imaginary assumption handlers

fixes #4149
fixes #2920
fixes #7886

@smichr
should this be `im(a).is_positive is not None`?