Inplace boolean setting on mixed-types with a non np.nan value
#### Code Sample,

```python

In [4]: df = pd.DataFrame({'series': pd.Series(range(3))})

In [5]: df["name"] = "abc"

In [6]: df_copy = df.copy()

In [7]: df.series.loc[2] = None

In [8]: df
Out[8]: 
   series name
0     0.0  abc
1     1.0  abc
2     NaN  abc

In [9]: df_copy
Out[9]: 
   series name
0       0  abc
1       1  abc
2       2  abc

In [10]: df[df.isnull()] = df_copy

#or
#df.where(-df.isnull(), df_copy, inplace=True)
#basically it's doing that at the end
```
#### Problem description
Pandas throws a TypeError:
```python
Traceback (most recent call last):
  File ".../test_replace.py", line 8, in <module>
    df[df.isnull()] = df_copy
  File ".../anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 2516, in __setitem__
    self._setitem_frame(key, value)
  File ".../anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 2552, in _setitem_frame
    self._check_inplace_setting(value)
  File ".../anaconda/lib/python2.7/site-packages/pandas/core/generic.py", line 3738, in _check_inplace_setting
    raise TypeError('Cannot do inplace boolean setting on '
TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value
```

I understand that in-place setting doesn't like to work with the mixed types, but I can't see a reason why it shouldn't work in this case and maybe check in "_check_inplace_setting()" is a bit too tight ?


#### Expected Output
same as with df.where(-df.isnull(), df_copy)
```python
In [12]: df.where(-df.isnull(), df_copy)
Out[12]: 
   series name
0     0.0  abc
1     1.0  abc
2     2.0  abc

```

