PERF: perf enhancements in indexing/query/eval

perf improvement in eval/query (and general take-like indexing)

```
In [1]: N = 1000000

In [2]: df = DataFrame({'a': np.random.randn(N)})

In [3]: min_val = df['a'].min()

In [4]: max_val = df['a'].max()
```
current master: 66980c68d188842b1c4d80d3508f539baab3cbe8
```
In [5]: %timeit df.query('(a >= min_val) & (a <= max_val)')
10 loops, best of 3: 31.6 ms per loop
```

This PR
```
In [5]: %timeit df.query('(a >= min_val) & (a <= max_val)')
10 loops, best of 3: 20.2 ms per loop
```