PERF: fix some of .clip() performance regression by using numpy arrays where possible
A recent change to respect dtypes in `.clip()` (https://github.com/pandas-dev/pandas/pull/24458) introduced a decent overhead of ~2ms to the call:
```
$ asv compare v0.23.4 v0.24.0rc1 --only-changed
       before           after         ratio
     [04095216]       [fdc4db25]
     <v0.23.4^0>       <v0.24.0rc1^0>
+         120±1μs      2.04±0.04ms    17.01  series_methods.Clip.time_clip(1000)
+        936±40μs      3.09±0.02ms     3.31  series_methods.Clip.time_clip(100000)
+         111±3μs      2.05±0.08ms    18.55  series_methods.Clip.time_clip(50)
```
This PR cuts the overhead from ~2ms to ~0.6ms by keeping `subset` as a numpy array; it's entirely boolean regardless of underlying dtype, so a DataFrame only adds overhead here:
```
$ asv compare v0.24.0rc1 HEAD --only-changed -s
       before           after         ratio
     [fdc4db25]       [63c47c58]
     <v0.24.0rc1^0>       <clip>
-     2.04±0.04ms         759±20μs     0.37  series_methods.Clip.time_clip(1000)
-     3.09±0.02ms      1.46±0.04ms     0.47  series_methods.Clip.time_clip(100000)
-     2.05±0.08ms         724±20μs     0.35  series_methods.Clip.time_clip(50)
```

- [ ] closes #xxxx
- [ ] tests added / passed
- [ ] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry
