Make numbers use their original string representation if possible

Doing any math (e.g. num+0) will change the representation.

This also fixes a bunch of jv_number memory management issues that matter now that numbers actually get allocated sometimes.

See issue #218 and #143