BUG: DatetimeIndex.__iter__ creates a temp array of Timestamp (GH7683)

closes #7683
 
Move ``__iter__`` from ``DatatimeIndex/PeriodIndex`` to ``DatetimeIndexOpsMixin``
Adding perf tests for change

```
 -------------------------------------------------------------------------------
Test name                                    | head[ms] | base[ms] |  ratio   |
 -------------------------------------------------------------------------------
timeseries_iter_datetimeindex_preexit        |  35.6683 | 2546.9604 |   0.0140 |
timeseries_iter_periodindex                  | 5051.6427 | 4353.0200 |   1.1605 |
timeseries_iter_periodindex_preexit          |  50.9930 |  43.8580 |   1.1627 |
timeseries_iter_datetimeindex                | 3463.0601 | 2596.2270 |   1.3339 |
 ```