Creating a dataframe from its rows has inconsistent type handling
#### Code Sample, a copy-pastable example if possible

```python
df = pd.DataFrame(
    {
        "date": {
            "a": pd.Timestamp("2019-02-22"),
            "b": pd.Timestamp("2019-02-22"),
        },
        "other": {"a": "not empty"},
    }
)
```

 _ | date | other
-- | -- | --
a | 2019-02-22 | not empty
b | 2019-02-22 | NaN

``` python
pd.DataFrame([row for _, row in df.iterrows()])
```
 _ | date | other
-- | -- | --
a | 2019-02-22 00:00:00 | not empty
b | 1550793600000000000 | None


changing type to dict helps, but you lose the index, and changes the NaN with a Nat
``` python
pd.DataFrame([dict(row) for _, row in df.iterrows()])
```


_  | date | other
-- | -- | --
0 | 2019-02-22 | not empty
1 | 2019-02-22 | NaT



#### Problem description

I would have expected that creating a dataframe from its rows would yield an identical dataframe, but the types have changed. Also, they changes seem kind of random, as values in other columns influence the result.

#### Output of ``pd.show_versions()``

<details>

INSTALLED VERSIONS
------------------
commit: 54492791116108199c24734a0220560974eb3372
python: 3.7.1.final.0
python-bits: 64
OS: Darwin
OS-release: 18.2.0
machine: x86_64
processor: i386
byteorder: little
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8

pandas: 0.25.0.dev0+144.g544927911.dirty
pytest: 4.1.1
pip: 18.1
setuptools: 40.6.3
Cython: 0.29.3
numpy: 1.15.4
scipy: 1.2.0
pyarrow: 0.12.0
xarray: 0.11.2
IPython: 7.2.0
sphinx: 1.8.3
patsy: 0.5.1
dateutil: 2.7.5
pytz: 2018.9
blosc: 1.7.0
bottleneck: 1.2.1
tables: 3.4.4
numexpr: 2.6.9
feather: None
matplotlib: 3.0.2
openpyxl: 2.5.14
xlrd: 1.2.0
xlwt: 1.3.0
xlsxwriter: 1.1.2
lxml.etree: 4.3.0
bs4: 4.7.1
html5lib: 1.0.1
sqlalchemy: 1.2.16
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: 0.2.0
fastparquet: 0.2.1
pandas_gbq: None
pandas_datareader: None
gcsfs: None

</details>
