Exact decimal numbers should parse as rationals

I've added a test to this effect.

The changes primarily consist of using `jsnums` methods rather than primitive JS
operations. These methods appropriately modify the number levels. The
`parseFloat` procedure has become more complicated because at every step we
ensure that exactness is preserved.