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

And further, with the benefit of vectorization:
```
In [10]: A = np.repeat(a[None, :], 10, axis=0)
In [12]: %timeit np.packbits(A).view(dtype='>u4')
100000 loops, best of 3: 3.75 µs per loop
In [13]: %timeit [lookup[tuple(row)] for row in A]
10000 loops, best of 3: 67.5 µs per loop
```