BUG: merging with non-stringlike columns can raise
```
In [1]: pd.__version__
Out[1]: '0.21.0rc1+36.ge1dabf3'

In [2]: left = pd.DataFrame({
   ...:     0: [1, 0, 1, 0],
   ...:     1: [0, 1, 0, 0],
   ...:     2: [0, 0, 2, 0],
   ...:     3: [1, 0, 0, 0]
   ...: })
   ...: left
   ...: 
Out[2]: 
   0  1  2  3
0  1  0  0  1
1  0  1  0  0
2  1  0  2  0
3  0  0  0  0

In [3]: right = left.astype('float64')
   ...: right
   ...: 
Out[3]: 
     0    1    2    3
0  1.0  0.0  0.0  1.0
1  0.0  1.0  0.0  0.0
2  1.0  0.0  2.0  0.0
3  0.0  0.0  0.0  0.0

In [4]: pd.merge(left, right)
In [4]: pd.merge(left, right)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-ff1e14288b09> in <module>()
----> 1 pd.merge(left, right)

~/pandas-dev/pandas/core/reshape/merge.py in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
     55                          right_index=right_index, sort=sort, suffixes=suffixes,
     56                          copy=copy, indicator=indicator,
---> 57                          validate=validate)
     58     return op.get_result()
     59 

~/pandas-dev/pandas/core/reshape/merge.py in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator, validate)
    567         # validate the merge keys dtypes. We may need to coerce
    568         # to avoid incompat dtypes
--> 569         self._maybe_coerce_merge_keys()
    570 
    571         # If argument passed to validate,

~/pandas-dev/pandas/core/reshape/merge.py in _maybe_coerce_merge_keys(self)
    928                 typ = lk.categories.dtype if lk_is_cat else object
    929                 self.left = self.left.assign(
--> 930                     **{name: self.left[name].astype(typ)})
    931             if name in self.right.columns:
    932                 typ = rk.categories.dtype if rk_is_cat else object

TypeError: assign() keywords must be strings

```