ENH: sql support for writing NaN + datetime64 values (GH2754, GH7103)

Closes #2754 
Closes #7103, #7936 (supercedes PR #8205 for this)

Database drivers expect `None` to translate this to `NULL`. 
Therefore, dataframe is cast to object dtype to convert `NaN` to `None`.

To check: performance impact. In principle should also not needed for integer colums (can't have NaNs)

Kind of API change: it did already work for postgresql (psycopg2), but it was translated to postgresql's `NaN` and now to `NULL` which is something different (but I think this is actually an improvement)
I don't think making a copy is a big deal its quite cheap to do it. (and much more time doing the conversions to tuples anyhow) You can make only reset if the ``self.index`` is True I guess. Too complicated otherwise.