API (string): str.center with pyarrow-backed string dtype
- [x] closes #54807 (Replace xxxx with the GitHub issue number)
- [x] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [x] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

Two bad options for older-pyarrow: different behavior or object fallback.  I guessed that @mroeschke would prefer different behavior here, would be happy to be proved wrong.
> Two bad options for older-pyarrow: different behavior or object fallback. I guessed that @mroeschke would prefer different behavior here, would be happy to be proved wrong.

I won't argue for ArrowDtype if there is a preference to not do object fallback there, but for StringDtype, we definitely want to fallback to object dtype, I think (as I proposed in https://github.com/pandas-dev/pandas/issues/54807#issuecomment-2256041345). Otherwise this gives a breaking change for people with older pyarrow, and inconsistent behaviour depending on the pyarrow version you have installed. While we can very easily avoid this breaking change, so then we should just do that IMO Using the `lean_left_on_odd_padding=False` breaks `test_string_array`:

```
import numpy as np
import pandas as pd

data = ["a", "bb", np.nan, "ccc"]
ser = pd.Series(data, dtype=pd.StringDtype(storage="pyarrow"))
alt = pd.Series(data, dtype=object)

res = ser.str.center(10)
exp = alt.str.center(10).astype(ser.dtype)

>>> res[0]
'     a    '
>>> exp[0]
'    a     '
```

The first explanation that comes to mind is that I misunderstood something and should be passing `lean_left_on_odd_padding=True`, but that in turn breaks test_center_ljust_rjust_fillchar:

```
import pandas as pd

ser = pd.Series(["a", "bb", "cccc", "ddddd", "eeeeee"], dtype=pd.StringDtype(storage="pyarrow"))
res = ser.str.center(5, fillchar="X")
exp = ser.astype(object).str.center(5, fillchar="X").astype(ser.dtype)

>>> res[2]
'ccccX'
>>> exp[2]
'Xcccc'
```