CLN: consolidate Iterator interface
In several of the IO interfaces, we allow `chunksize=` and `iterator` to allow chunk reading. These all use sepearate non-conforming base classes.

We should create a base class `core/base.py/Iterator` that inherits from `collections.Iterator`. Then incorporate as much of this combined functionaility into this base class. To have them each have a similar interface.
- [x] `read_stata` #9493, #12173
- [ ] `read_hdf` [here](https://github.com/pydata/pandas/blob/master/pandas/io/pytables.py#L1276)
- [x] `read_csv` #12173
- [ ] `read_msgpack` [here](https://github.com/pydata/pandas/blob/master/pandas/io/packers.py#L599)
