BUG (string dtype): convert dictionary input to materialized string array in ArrowStringArray constructor
https://github.com/pandas-dev/pandas/pull/54074 allowed to pass dictionary encoded string data in the `ArrowStringArray` constructor, because such values can be passed when reading partitioned datasets (it was fixing https://github.com/pandas-dev/pandas/issues/53951).

However, when you actually have a column with string dtype but backed by a dictionary encoded pyarrow array, our StringArray implemention is not set up for that, so once you call some string specific functionality, you can run into errors. Example:

```
In [2]: arr = pd.core.arrays.ArrowStringArray(pa.array(["a", "b", None, "a"], pa.large_string()).dictionary_encode())

In [3]: arr
Out[3]: 
<ArrowStringArray>
['a', 'b', <NA>, 'a']
Length: 4, dtype: string

In [4]: pd.Series(arr)
Out[4]: 
0       a
1       b
2    <NA>
3       a
dtype: string

In [5]: pd.Series(arr).str.len()
...
ArrowNotImplementedError: Function 'utf8_length' has no kernel matching input types (dictionary<values=large_string, indices=int32, ordered=0>)
```

Maybe we could at some point properly support storing dict encoded string values under the hood. But until then, I think it is better to materialize the dictionary encoded input to a plain pyarrow string array, which is what this PR is doing.

- [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
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

Thanks @jorisvandenbossche 