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

@robertlayton , I found that, with loop, it is faster when the `n_features` is large. I can obtain the same results as the loop with `np.linalg.norm(candidates - query, axis=1)`. This is super fast when the dimension is low. But with high dimensions, this gets slower than the loop. Here are some profiling results:

n_samples = 10000 (fixed)

n_features = 100 : 
without loop: 57.1 ms
with loop: 3.86 ms

n_features = 500 : 
without loop: 21 ms
with loop: 70.6 ms

n_features = 1000 : 
without loop: 40.5 ms
with loop: 82.3 ms

n_features = 2000 : 
without loop: 79.6 ms
with loop: 104 ms

n_features = 5000 : 
without loop: 200 ms
with loop: 177 ms

n_features = 10000 : 
without loop: 377 ms
with loop: 302 ms

n_features = 20000 : 
without loop: 752 ms
with loop: 551 ms