[ArrowStringArray] implement ArrowStringArray._str_contains
not yet dealt with `na`. no tests are failing so we need tests for this.

we can either use the fallback when `na` is specified or handle `na` in the array method, which may be more performant.

should we replicate StringArray:

```
>>> s = pd.Series(["Mouse", "dog", "house and parrot", "23", np.NaN], dtype="string")
>>> 
>>> s.str.contains("og", na=3, regex=False)
0    False
1     True
2    False
3    False
4     True
dtype: boolean
>>> 
>>> s.str.contains("og", na=np.nan, regex=False)
0    False
1     True
2    False
3    False
4     <NA>
dtype: boolean
>>> 
```
or return an object array to preserve `na` if not pd.NA, True or False instead of coercing to bool/null?