REF: Use numpy set methods in interpolate
`_interpolate_1d` goes back an forth between Python objects and Numpy objects in order to use Python `set` methods. Refactoring to just use Numpy set routines instead
Neat!  Is there a perf bump or just the principle of the thing? > Neat! Is there a perf bump or just the principle of the thing?

Looks like there's a perf bump when the refactored `limit_direction` and `limit_area` are hit

```python
In [1]: import pandas as pd
+ /opt/miniconda3/envs/pandas-dev/bin/ninja
[4/4] Linking target pandas/_libs/tslibs/parsing.cpython-310-darwin.so

In [2]: ser = pd.Series([None, 1, None] * 250_000, dtype="Int64")

In [3]: %timeit ser.interpolate(limit_direction="forward", limit_area="outside")
24.7 ms ± 1.54 ms per loop (mean ± std. dev. of 7 runs, 10 loops each). # PR

In [3]: %timeit ser.interpolate(limit_direction="forward", limit_area="outside")
63.3 ms ± 563 µs per loop (mean ± std. dev. of 7 runs, 10 loops each). # main
``` Going to merge as all green here. Can follow up if needed