use double-conversion for JS number parsing
Add a shared number conversion layer backed by double-conversion and route
Number(), parseFloat(), numeric literal parsing, and Number formatting through
it. This fixes decimal precision/rounding edge cases, validates malformed
decimal literals such as missing exponent digits, and handles JS string-number
parsing rules more consistently.