Fix version checking

Accept only integers greater or equal than zero and lower than 9007199254740992 (largest integer in JS without losing precision).

Also, do not allow versions that parsed lead to a valid number (e.g. `parseInt('2a') == 2`