PERF: fix some of .clip() performance regression by using numpy arrays where possible
State: closed

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


Labels:
name: Performance
description: Memory or execution speed performance
name: Dtype Conversions
description: Unexpected or buggy dtype conversions

Comments:
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=h1) Report
> Merging [#24735](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/fdc4db25a9988a7b595a3756760d05a6c177123d?src=pr&el=desc) will **increase** coverage by `<.01%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/24735/graphs/tree.svg?width=650&token=eZ4WkYLtcO&height=150&src=pr)](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #24735      +/-   ##
==========================================
+ Coverage   92.39%   92.39%   +<.01%     
==========================================
  Files         166      166              
  Lines       52358    52362       +4     
==========================================
+ Hits        48374    48378       +4     
  Misses       3984     3984
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.81% <100%> (ø)` | :arrow_up: |
| #single | `43.06% <0%> (-0.03%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/core/generic.py](https://codecov.io/gh/pandas-dev/pandas/pull/24735/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZ2VuZXJpYy5weQ==) | `96.63% <100%> (ø)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=footer). Last update [fdc4db2...63c47c5](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=h1) Report
> Merging [#24735](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/f4458c18287288562b21adece524fc1b046e9724?src=pr&el=desc) will **increase** coverage by `<.01%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/24735/graphs/tree.svg?width=650&token=eZ4WkYLtcO&height=150&src=pr)](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #24735      +/-   ##
==========================================
+ Coverage   92.39%   92.39%   +<.01%     
==========================================
  Files         166      166              
  Lines       52378    52382       +4     
==========================================
+ Hits        48393    48398       +5     
+ Misses       3985     3984       -1
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.81% <100%> (ø)` | :arrow_up: |
| #single | `42.9% <0%> (-0.01%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/core/generic.py](https://codecov.io/gh/pandas-dev/pandas/pull/24735/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZ2VuZXJpYy5weQ==) | `96.63% <100%> (ø)` | :arrow_up: |
| [pandas/util/testing.py](https://codecov.io/gh/pandas-dev/pandas/pull/24735/diff?src=pr&el=tree#diff-cGFuZGFzL3V0aWwvdGVzdGluZy5weQ==) | `88.13% <0%> (+0.09%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=footer). Last update [f4458c1...f372c9e](https://codecov.io/gh/pandas-dev/pandas/pull/24735?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

@qwhelan can you update
@qwhelan can you merge master and ping when passing
thanks @qwhelan