Test @retry() with timeout more precisely
Behave better while timeouting in @retry()

- no timeout to float conversion
- no explicit check for type/value errors
- pass attempt number to timeout callback
- sleep only if timeout is positive