Refactor DataFrame.combine for datetimelike
In DataFrame.combine, we handle datetimelike data special. https://github.com/pandas-dev/pandas/blob/296c251d0e2bd112d26b980f1798db14f264b664/pandas/core/frame.py#L5116

We attempt to pass a third argument to the combining `func`. This breaks things like

```python
In [16]: def combiner(x, y): return x

In [17]: a = pd.DataFrame({"A": range(4)})

In [18]: b = pd.DataFrame({"A": pd.date_range('2017', periods=4)})

In [19]: a.combine(a, combiner)
Out[19]:
   A
0  0
1  1
2  2
3  3

In [20]: b.combine(b, combiner)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-20-3271f7709d72> in <module>
----> 1 b.combine(b, combiner)

~/sandbox/pandas/pandas/core/frame.py in combine(self, other, func, fill_value, overwrite)
   5116             needs_i8_conversion_i = needs_i8_conversion(new_dtype)
   5117             if needs_i8_conversion_i:
-> 5118                 arr = func(series, otherSeries, True)
   5119             else:
   5120                 arr = func(series, otherSeries)

TypeError: combiner() takes 2 positional arguments but 3 were given
```

We could document that, but it still feels hacky. I'd rather that the `combiner` func infer whether an i8 conversion is needed.

xref https://github.com/pandas-dev/pandas/pull/3595/