Use the RangeStep iterator and remove `uint::range_step` and friends

Migrate from `uint::range_step` (and corresponding for all the other primitive numeric types) to the `std::iter::range_step` iterator.

The first commit resolves an issue with negative steps when using the iterator.