Fix parsing of integer values in JSON

Please cherry-pick only the change to "external/JSON.cs" (latest commit).
There is a serious issue caused by casting ALL numbers to (float) in ParseNumber() before deciding whether it's actually a floating point or an integer. Parsing integers above 16777216 (24 bits) to floats causes a loss of least significant bits as per IEEE spec, resulting in wrong values after casting back to (int).