Make generated contracts for Floats include NaN.

Closes PR13464.
Add extra tests for contract generation and float zeroes.
Add types for imaginary numbers and fix type of exact? and inexact?.
Don't special case typechecking of =.

Its type is more useful than the special typing rule.
Exclude the right zeroes when checking for equality.