BUG: read_csv not applying dtype to index col
- [x] closes #9435
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [x] whatsnew entry

``_agg_index`` and ``_convert_to_ndarryays`` need a refactor in the future, they both contain more or less the same casting logic now

> _agg_index and _convert_to_ndarryays need a refactor in the future, they both contain more or less the same casting logic now

sgtm Unfortunately, it does not work for cases where dtype is specified globally:

```py
>>> import pandas as pd
>>> from io import StringIO
>>> data = "1,a\n2,b"
>>> df = pd.read_csv(StringIO(data), index_col=0, dtype=str, header=None)
>>> df.index
Int64Index([1, 2], dtype='int64', name=0)
```

whereas this works

```py
>>> df = pd.read_csv(StringIO(data), index_col=0, dtype={0:str}, header=None)
>>> df.index
Index(['1', '2'], dtype='object', name=0)
```

However i need to set all columns str globally. So I expect the first chunk of code works and turns index into str. Hm I think I prefer the current behavior. But you could open an issue to gather feedback from others. One additional note: If we should decide to change that, we need a deprecation cycle.