BUG: DatetimeIndex.asobject raises ValueError when contains NaT
Closes #7539. 

Also, this fixed #7112 case 3 and case 4 to preserve tz. I've modified the tests for it.

Related to #6469.

pls do a perf check make sure nothing really changed
 Result of vbench attached.
- 1st time

```
-------------------------------------------------------------------------------
Test name                                    | head[ms] | base[ms] |  ratio   |
-------------------------------------------------------------------------------
groupby_frame_cython_many_columns            |  13.8263 |  12.6497 |   1.0930 |
packers_write_json_date_index                | 249.6490 | 225.3887 |   1.1076 |
packers_write_pack                           |  85.4166 |  75.2767 |   1.1347 |
datetimeindex_normalize                      | 195.3310 | 162.7570 |   1.2001 |
```
- 2nd time

```
write_store_table_mixed                      |  74.6583 |  64.0423 |   1.1658 |
frame_isnull                                 |   2.7107 |   2.2360 |   1.2123 |
reindex_daterange_backfill                   |   2.4064 |   1.9484 |   1.2351 |
dtype_infer_int32                            |   3.3810 |   2.7177 |   1.2441 |
stat_ops_frame_mean_float_axis_0             |   2.3917 |   1.8989 |   1.2595 |
series_drop_duplicates_string                |   1.1253 |   0.8860 |   1.2702 |
```
 this is ok...ping when green
 @jreback now green.
