[ArrowStringArray] REF: str.extract dispatch to array
```
       before           after         ratio
     [170b4391]       [62cc9c38]
     <master>         <_str_extract>
-       138±0.4ms          117±2ms     0.85  strings.Methods.time_extract('string')
-      14.4±0.6ms      11.9±0.06ms     0.82  strings.Methods.time_isdigit('str')
-       109±0.4ms       81.1±0.9ms     0.74  strings.Split.time_split(True)
-      82.3±0.3ms       46.3±0.2ms     0.56  strings.Split.time_rsplit(True)
-      50.0±0.4ms       27.3±0.4ms     0.55  strings.Methods.time_partition('string')
-      49.0±0.2ms       26.4±0.4ms     0.54  strings.Methods.time_rpartition('string')
-      55.3±0.5ms       28.8±0.3ms     0.52  strings.Methods.time_partition('str')
-      54.8±0.4ms       27.8±0.2ms     0.51  strings.Methods.time_rpartition('str')

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.
```

marked as draft since it may be better to split the perf improvements from the dispatch to array refactor and also may be better to finish #41085 first.

also need to complete the parameterisation of the extract tests.

also maybe able to reduce the _wrap_result changes by passing a 2d array without expand kwarg so that expand is inferred and the code removed here will be bypassed. so will look into that before marking as ready for review.

if I can reduce the diff here (even if only by doing the test parameterisation as a precursor), then may be worth adding the pyarrow native implementation here also.
