Parse IntervalArray and IntervalIndex from strings
Currently, when saving a DataFrame with an IntervalIndex as a CSV, there is no easy way to parse it again. With this PR, class methods are introduced to handle this:

```python
import tempfile

import numpy as np
import pandas as pd

# Create a DataFrame with an IntervalIndex
df = pd.DataFrame(data=[1, 2, 3], index=pd.IntervalIndex.from_breaks([2., 3., 4., 5.]))

# Create a temporary directory to save the csv in
temp_dir = tempfile.TemporaryDirectory()
df.to_csv(temp_dir.name + 'df.csv')

print(df)

# Read the DataFrame containing the IntervalIndex column
df2 = pd.read_csv(temp_dir.name + 'df.csv')

# Convert the column to an IntervalIndex
df2.index = pd.IntervalIndex.from_strings(df2.iloc[:, 0])
df2.drop(columns=df2.columns[0], inplace=True)

print(df2)

# Validate that the original and parsed indices are the same
assert np.array_equal(df.index, df2.index)

```

```
            0
(2.0, 3.0]  1
(3.0, 4.0]  2
(4.0, 5.0]  3
            0
(2.0, 3.0]  1
(3.0, 4.0]  2
(4.0, 5.0]  3
```

As can be seen in the tests, the conversion supports each valid dtype of an Interval and raises descriptive exceptions if it fails.

- [X] closes #23595
- [X] tests added / passed
- [X] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [ ] whatsnew entry
