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
```
