Implement float support to FOR IN RANGE loops (fixes #1850)

FOR IN RANGE loop works now even with float arguments.
One more thing: It seems that `str` loses quite a bit of digits compared to `repr`, and with the latter the number also needs to be bigger for `e` to appear:

```python
>>> num = 1.2345678901234
>>> str(num)
'1.23456789012'
>>> repr(num)
'1.2345678901234'
>>> num = 1.11111111111111111111111111e20
>>> str(num)
'1.11111111111e+20'
>>> repr(num)
'1.1111111111111111e+20'
>>> num = 1.11111111111111111111111111e15
>>> str(num)
'1.11111111111e+15'
>>> repr(num)
'1111111111111111.1'
```

It might thus be a good idea to use `repr` instead of `str` when converting the number to a string. That could also be done just once in the beginning of `_digits`.