[WIP] Locality Sensitive Hashing for approximate nearest neighbor search(GSoC)

I wouldn't be surprised if your cache method is faster, but `test[0] + (2**24) ...` etc shouldn't be necessary. You can use a view over the same array to convert from uint8 to uint32:
```python
>>> np.packbits(np.array([0,0,0,0,0,0,0,0,] * 1 + [0,0,0,0,0,0,0,1] * 3)).view(dtype='>u4')
array([65793], dtype=uint32)
```
65739 = 2**0 + 2**8 + 2**16


Comparing this to lookup in a dict:
```
In [2]: a = np.array([0,0,0,0,0,0,0,0,] * 1 + [0,0,0,0,0,0,0,1] * 3)
In [3]: %timeit np.packbits(a).view(dtype='>u4')
1000000 loops, best of 3: 1.98 µs per loop
In [4]: lookup = {tuple(a): 5}
In [5]: %timeit lookup[tuple(a)]
100000 loops, best of 3: 6.26 µs per loop
```