smarter number and string detection for Mojo::JSON

This version is a lot more DWIM and can handle a few more edge cases than our current `B` based code, such as dualvars and strings that have accidentally been used in numeric context. Only downside is that it needs to do more copies and is therefore a little slower. For example 100000 iterations of `encode_json({foo => "bar" x 20000, baz => 23})` went from 27.398 to 29.621 seconds. I think a vote will have to decide if the change is worth it.