PERF/ENH: allow Generator in sampling methods
- [x] closes #38100 
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

The perf gap is pretty crazy:

```

In [10]: rng = np.random.default_rng()

In [11]: ser = pd.Series(np.zeros(10 ** 6))

In [12]: %timeit ser.sample(n=10 ** 4)
13.8 ms ± 231 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [13]: %timeit ser.sample(n=10 ** 4, random_state=rng)
569 µs ± 8.11 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

```

Leaving #28440 open because I think the end goal should still be to make using these the default. But assuming that change isn't too easy since will be a breaking change?
thanks @mzeitlin11 

might need to slightly revist after we drop 1.17 (shortly)