PERF: remove use of Python sets for interpolate
have been investigating avoiding internals for interpolation. xref #34628


This PR address the issue of using Python sets, which is responsible for the bulk of the time in our current asv.

There are other improvements (will raise other PRs), but would need new benchmarks to show a benefit such as different index types and unsorted indexes. so this PR is targeting our current benchmark first.

prelim results (will post asv results if tests pass)
```
N = 10000
# this is the worst case, where every column has NaNs.
df = pd.DataFrame(np.random.randn(N, 100))
df.values[::2] = np.nan
df
%timeit df.interpolate()
# 189 ms ± 24.1 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)  <-- master
# 65.1 ms ± 635 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)  <-- PR
```

some environments are failing with `TypeError: diff() got an unexpected keyword argument 'prepend'` looks fine. do we have sufficient asv's for this? will get back to this after 1.0.5 we don't have many asvs so could probably add more The current asv is a single float block with a sorted RangeIndex and no limit (which can be fastpathed) so not representative of potentially much slower cases I'll close this for now. still don't have access to desktop and running asvs on laptop is painful.