ENH: A new GroupBy method to slice rows preserving index and order
Closes #42864

New indexable attribute GroupBy.iloc to perform most grouped slices analagous to DataFrame.iloc

Row indexes can be integers or slices with +ve step
Row slices preserve the DataFrame order and grouping and extend the existing GroupBy head() and tail() methods
All column indexes are handled as for DataFrame.iloc

-ve slice step is not currently handled, and would have to reverse the order.
There is no plan to implement Integer lists since these do not preserve the order at all and cannot be easily vectorized.

Note
----
Neither GroupBy.nth() nor GroupBy.take() take a slice argument and neither of them preserve the original DataFrame order and index. They are both slow for large integer lists and take() is very slow for large group counts.

Example use case
--------------------
Supose that we have a multi-indexed DataFrame with a large primary index and a secondary sorted
in a different order for each primary index. 
To reduce the DataFrame to a middle slice of each secondary, we can groupby the primary index and then use iloc. 
This preserves the original DataFrame's order and indexing.
(See tests/groupby/test_groupby_iloc)