BUG: preserve dtypes in interpolate

Closes https://github.com/pydata/pandas/issues/6290

@jreback is there a good way to update **part** of a BlockManager inplace? I have a new BlockManager from `interpolate` and the original BlockManager (or DataFrame) which contains some "all good" columns that didn't get interpolate on, and some bad columns that did get interpolated on.

For the non inplace version I'm calling `self._constructor` on the BlockManager returned from interpolating and concating that to the all good columns.