simplified range_iterator (renamed for consistency)
newrange: fixed slices on empty ranges
simplified newrange.__reversed__ and corrected return type