Rename Mul._eval_is_real to Mul._eval_is_extended_real
In Mul._eval_is_extended_real, don't assume complex=None -> extended_real=None

This is because complex is finite, so something like positive=True gives
complex=None, but extended_real should be True.
Explicitly set I to be not real and algebraic

We must set it as real because imaginary could be zero, so imaginary=True does
not imply real=False.
Fix Mul and Add _eval_is_imaginary allowing zero to be imaginary

This also doesn't allow real + real to not be imaginary, as it could be zero.
Fix all tests in test_assumptions.py

This is with the exception of one test, which tests that S("-sqrt(3)*I/2 +
0.866025403784439*I") is not real, which doesn't make sense as it's equal
to 0.
Add Float._eval_is_infinite

!finite does not imply infinite, so this is needed to make
Float('+inf').is_infinite == True.
Float should be extended_real, not real