[Feature Request] pd.DataFrame.schema iterable
#### Code Sample, a copy-pastable example if possible

```python
# feature request
schema = df.schema  # include all the index columns and the df.columns
for column in schema:
    print(column.name, column.dtype)  # plus other attributes?
```

Currently this is only available by using a pyarrow table, e.g.
```python
import pyarrow as pa
table = pa.Table.from_pandas(df)
schema = table.schema
schema_types = [[s.name, str(s.type).upper()] for s in schema]
```

It requires extra code to distinguish between index columns and other columns.
```python
# assuming schema from above pyarrow table
schema_dict = dict([[s.name, str(s.type).upper()] for s in schema])
# then iterate on df.index.names and df.columns to filter the schema_dict, e.g.
schema_index = dict([[name, schema_dict[name]] for name in df.index.names])
```

#### Problem description

- the df.info() is not iterable, it just prints information
  - also, it has no dtypes for the index columns

- the df.dtypes is a Series but it's not all columns, with index columns, e.g.

```python
types = df.dtypes
type(types)
# <class 'pandas.core.series.Series'>
types.index  # df.columns but not df.index columns
for idx in types.index:
    print(idx, types[idx])
```

- feature request for an iterable schema data structure

```python
schema = df.schema  # include all the index columns and the df.columns
for column in schema:
    print(column.name, column.dtype)

# the column object may have other attributes too:
column.name  # str
column.dtype  # numpy.dtype ?
column.is_index  # boolean

df.schema.to_dict()  # column.name as keys, column object as value
df.schema.to_sql()   # just DDL output
```

Similar schema are available if the DataFrame is serialized to parquet and read with pyarrow, but the pyarrow table schema is not iterable in the manner requested here.

Also note that `MultiIndex` has no dtypes, this feature request implicates new features for an index object.