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)
you can do the nan replace if ``b._can_hold_na`` (so will skip integer for example)