BUG: setting float on integer column with DataFrame.at casts the value to integer.
- [x] I have checked that this issue has not already been reported.

- [x] I have confirmed this bug exists on the latest version of pandas.

- [x] (optional) I have confirmed this bug exists on the master branch of pandas.

---

#### Code Sample, a copy-pastable example

```python
In [5]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [3, 4, 5]})

In [6]: df
Out[6]: 
   A  B
0  1  3
1  2  4
2  3  5

In [7]: df.at[1, 'B'] = 1.2

In [8]: df
Out[8]: 
   A  B
0  1  3
1  2  1
2  3  5

```

#### Problem description

`DataFrame.at` sets the new value but casts it to integer.

#### Expected output

This is not the issue with `loc`:

```python
In [9]: df.loc[1, 'B'] = 1.2

In [10]: df
Out[10]: 
   A    B
0  1  3.0
1  2  1.2
2  3  5.0
```
