(WIP) API/BUG: Make consistent datetime string parse function

### Original Description
Allows ``DatetimeIndex.__init__`` to accept ``NaT`` string representation.

### Updated Description
The original problem is caused by the inconsistencies in parsing function. Make following results to be consistent.
```
date_str = '2011Q3'
pd.tseries.tools.parse_time_string(date_str)[0]
# 2011-07-01 00:00:00

pd.DatetimeIndex([date_str])[0]
# 2011-07-01 00:00:00

pd.tseries.tools.to_datetime(date_str)
# 2011Q3 <type str>, not parsed

pd.Timestamp(date_str)
# ValueError: Unable to parse 2011Q3
```
It also closes #6961.
if ``freq`` is specified then it should be passed to the ``DatetimeIndex`` (which it will compare vs the ``inferred_freq`` and raise if necessary)