Clean up some trait impls in core::num.

This removes the special casing for `float`s where it was not necessary, as
`-0.0 == 0.0`.
Ah, fair enough. Well, in that case, is there any particular reason to use `Zero::zero()` here instead of just using `$v` as was previously done? After optimization it should ultimately generate the same code, but it just seems simpler (to me as a reader of the code) to continue using `$v`.