PERF: pd.eval when using mixed types
```
In [11]: df = pd.DataFrame({"A": np.arange(1000000), "B": np.arange(1000000, 0, -1), "C": np.random.randn(1000000)})

In [13]: %timeit pd.eval('df*df')
1 loops, best of 3: 635 ms per loop

In [14]: df = df.astype(float)

In [15]: %timeit pd.eval('df*df')
100 loops, best of 3: 5.87 ms per loop
```

the time is all in `_interleave` as we need to pass values to numexpr
