3606: keep track of original float

When a negative float was encountered, its value was changed but
this, then, lost the sign of the float when it was used as the key
for the replacements. Now the key is captured before the calculation
begins.
distinguish between 0 and None in nsimplify

tolerance was being set even if the user wanted an exact value;
now if tolerance is 0 code that was formerly not run will be run.
Merge pull request #1728 from smichr/3606

3606: keep track of original float