Patch for pandas.core.computation.eval with str/byte ndarrays
Hello,
I am interested in using Pandas as a numexpr replacement, since its eval/query syntax is much cleaner. However, it doesn't quite work for me, since I rely on byte ndarrays, and I want to avoid DataFrames. Here is an example script that shows the problems I had, and how they are solved in a patched version. I am not very used to open source projects, I hope my patch will be acceptable.

cheers

Sjoerd

### Example script

```python
import numpy as np
import numexpr as ne
from pandas import DataFrame
from pandas.core.computation.eval import eval as pd_eval

# Sample data
s = np.zeros(6, 'S5')
v = np.array([5,8,3,6,7,2])
s[:4] = "Test", "Test2", "Test", "Test"
s_u = np.array([ss.decode() for ss in s])  # s as unicode
dic = {"s": s, "v": v}
dic_u = {"s": s_u, "v": v}


print("Golden standard (numexpr with ugly syntax)\t", ne.evaluate("(s == 'Test') & (v > 3)", dic))

df = DataFrame(dic)
print("df with bytes (wrong)\t\t\t\t", df.eval("s == 'Test' and v > 3").values)
try:  # ugly syntax AND does not work
    print(df.eval("s == b'Test' and v > 3").values)
except AttributeError:
    print("*" * 50)
    import traceback; traceback.print_exc(0)
    print("*" * 50)

df = DataFrame(dic_u)
print("df with unicode (works)\t\t\t\t", df.eval("s == 'Test' and v > 3").values)


from pandas.core.computation.eval import eval as pd_eval
print("pd_eval with bytes (wrong)\t\t\t", pd_eval("s == 'Test' and v > 3", global_dict=dic))
print("pd_eval with unicode (wrong)\t\t\t", pd_eval("s == 'Test' and v > 3", global_dict=dic_u))

print("patched pd_eval with bytes (works)\t\t", pd_eval("s == 'Test' and v > 3", global_dict=dic, align_result=False, str_as_bytes=True))
print("patched pd_eval with unicode (works)\t\t", pd_eval("s == 'Test' and v > 3", global_dict=dic_u, align_result=False, str_as_bytes=True))
```

### Output
```
Golden standard (numexpr with ugly syntax)       [ True False False  True False False]
df with bytes (wrong)                            [False False False False False False]
**************************************************
Traceback (most recent call last):
AttributeError: 'PandasExprVisitor' object has no attribute 'visit_Bytes'
**************************************************
df with unicode (works)                          [ True False False  True False False]
pd_eval with bytes (wrong)                       [False False False False False False]
pd_eval with unicode (wrong)                     [False False False False False False]
patched pd_eval with bytes (works)               [ True False False  True False False]
patched pd_eval with unicode (works)             [ True False False  True False False]
```