Format very small (<0.01) and negative numbers correctly

Also added more tests around real numbers
Rewrite formatNumericLabel to a more readable algorithm
Check for no change using precision