Avoid upcasting integers in some merge operations
Reported on mailing list

```
I've noticed that merge does not necessarily retain the datatype of the
variables passed. For example,

----

stock = DataFrame({'date' : [2000, 2001, 2002],
      'S' : [10.1, 10.5, 11.1]})

ex = DataFrame({'Grant' : [1, 1], 'date' : [2000, 2002]})


merged = stock.merge(ex, how='left', on='date')

----
In merged, the Grant variable has been promoted from int to float. Is this
deliberate behavior?
```
