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

FOR IN RANGE loop works now even with float arguments.
On my machine `str(1.123456789898787879789e15)` is `'1.1234567899e+15'`. Shouldn't `digits1int` be 10 and `digits2int` 15 in that case, and thus `max(0, digits1int-digits2int)` ought to be zero? My analysis is that with any number that is big enough that its `str` will contain `e`, the digits in that representation is less than the exponent. It might actually be fine to just return zero if we have `e` with a positive exponent, but that could be done without extra logic.

You are right that `1e-20` returning 20 is correct. The current code doesn't make it too explicit, though. Something like `if exponent < 0: return abs(exponent)` would be much clearer.

There are so many corner cases here that separate tests for `_digits` alone would be really helpful. They would especially help later if someone else is looking at this code and tries to understand it. Tests would also make it certain future changes don't accidentally break anything.