PERF: Improve performance of Series.isin() on sets
- [x] closes #25507
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Issue #25507 pointed out that using `DataFrame.isin` or `Series.isin` on a set took extremely long due to the set being first converted to a list then back to a hash table to lookup values. This fix eliminates that conversion and simply uses the set to directly test membership.

Sample code from issue:
```python
import pandas as pd

squares = set(a**2 for a in range(10000000))
series = pd.Series(range(100))

def test_isin():
    _ = series.isin(squares)

%timeit test_isin()
```
Output:
```
Before:
3.89 s ± 66.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

After:
134 µs ± 11.3 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
```

There are already several unit tests covering this function on sets with different dtypes. Additionally, I added an additional asv benchmark for sets:
```
series_methods.IsIn.time_isin
======== =============
dtype
-------- -------------
int64    1.46±0.04ms
uint64    1.76±0.1ms
object    3.53±0.2ms
======== =============

series_methods.IsIn.time_isin_set
======== =============
dtype
-------- -------------
int64    1.58±0.03ms
uint64   1.61±0.06ms
object   3.24±0.04ms
======== =============
```
If the additional benchmark is overkill I can of course remove it.