Imaginary: implement a pure Imaginary type, let `im = Imaginary(1)`.

This needs a bit of work still. I broke some trigonometric tests for complex numbers where one component is `Inf` in `base/complex.jl` (cc: @jiahao), and there are some ambiguity warnings I didn't yet avoid. However, all-in-all I think this is a very positive change and that we probably should have made it a long time ago.