ENH: Add ArrowDype and .array.ArrowExtensionArray to top level
- [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
- [x] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).

Moved `ArrowIntervalType` and `ArrowPeriodType` to a separate file `arrow/extension_types.py` to avoid a circular import.

Will add documentation in a separate PR https://github.com/pandas-dev/pandas/pull/47854
1. Definitely will mark `ArrowDtype` experimental for 1.5 (was planning on the subsequent doc PR)

2. At least for 1.5, I would like users to be able to create other arrow-backed dtypes from the constructor e.g. `Series(..., dtype=int64[pyarrow])` i.e. mimic what is possible now with the `string[pyarrow]` functionality.

3. I'm fine with not deprecating things in 1.5. I would just like to highlight that `"string[pyarrow]"` can be understood by both `StringDtype(storage="pyarrow")` and `ArrowDtype`, and at a high level, the functionality of `ArrowExtensionArray` can be superseded by `StringArrowArray` in the future if the `str` methods are moved over. `ArrowDtype` I think should be included in the top level because arrow-types-with-parameters cannot always be constructed from a string e.g.

```
In [5]: dtype = pd.core.arrays.arrow.dtype.ArrowDtype(pa.timestamp(unit="s", tz="UTC"))

In [6]: pd.Series([datetime.datetime.now()], dtype=dtype)
Out[6]:
0    2022-07-25 10:58:58+00:00
dtype: timestamp[s, tz=UTC][pyarrow]
```

`ArrowExtensionArray` I only really included since all the arrays are exposed in `pandas.arrays`. One use case for exposing this in `pandas.arrays` is if the user data has an arrow array object they want to bring into pandas e.g.

```
In [7]: pa_array = pa.array([1, 2])

In [8]: pd.Series(pd.core.arrays.arrow.ArrowExtensionArray(pa_array))
Out[8]:
0   1
1   2
dtype: int64[pyarrow]
```

https://github.com/pandas-dev/pandas/pull/47854 would be a start to the documentation of the functionality I was hoping to demonstrate I'm fine with adding these to the top level (reasoning: just having support for *storage* of these types in a DataFrame is helpful, even if many operations fail).  Agreed with Joris that we shouldn't deprecate `StringDtype(storage="arrow")`, at least not yet. Okay agreed. Considering deprecation for `ArrowStringArray/StringDtype(storage="pyarrow")` is definitely out of scope here and the near term. @jorisvandenbossche as discussed in the dev meeting today, documentation noting that this is experimental was made in https://github.com/pandas-dev/pandas/pull/47854/commits/4e3b3b993f250231285f69d951bdf5f131f58f13 in https://github.com/pandas-dev/pandas/pull/47854 Will probably merge this PR this week if no further comments. Going to merge. Can address any followups if needed in https://github.com/pandas-dev/pandas/pull/47854