readValueToken spent almost half its time dealing with weirdly formed or broken floats. Now has a shorter path that can early return a successfully parsed float and only do slow handling of cases that need it (notably zero, fortran style exponent and errors).