int64 Series: += with boolean mask yielding wrong resultss
It looks like `__iadd__` for a view of int64 series obtained by applying a boolean mask (*without* `.loc`) works fine if mask is only composed of `True` (i.e. if `mask.all() is True`); otherwise, it seems to convert the values to float midway, and then back to int64 -- which loses precision and yields wrong results, as seen in the example below. Any ideas on the underlying reason for this? If it's not meant to be used without `.loc` indexer, should it fire a warning?

Thanks.

(I realize this may be a more generic problem, but this is the one I can report in detail)

```python
>>> import pandas as pd
>>> pd.__version__
'0.20.3'

>>> x = 123456789012345678

>>> s = pd.Series([0, 1])
>>> s += x
>>> s
0    123456789012345678
1    123456789012345679
dtype: int64
# fine, as expected

>>> s = pd.Series([0, 1])
>>> s[[True, True]] += x
>>> s
0    123456789012345678
1    123456789012345679
dtype: int64
# also fine

>>> s = pd.Series([0, 1])
>>> s[[False, True]] += x
>>> s[[True, False]] += x
>>> s
0    123456789012345680  # ????
1    123456789012345680  # ????
dtype: int64
# not fine

# 123456789012345680?
>>> int(float(x))
123456789012345680
```