Only deserialize number in `data()` if it doesn't change its string

This fixes large, unsafe integers to be deserialized as numbers and thus
their value broken because of overflow.

This reverts #865 because it was a wrong direction to go in. The test
assertion was broken in the first place because it used an unsafely
large integer to begin with.
Add test for `data()` deserializing floats as well
Merge branch 'data-number-overflow'

Closes #1018, closes #1019
Fix Evidence messing up objects in assertion failed messages

Since starting to log test failures to the test server in
524ee26cb5d19894366cfffb0a9f5e3841359b5b, the messages about failed
assertions were displayed like this in browser console:

    Expected %o to be == to %o.

This was because Evidence's `printf` was misbehaving and emptying the
arguments array which was supposed to be forwarded to `console.log()`.