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

Firstly, I think `max_candidates` should be `min_candidates`: we keep getting more until it is met. Or perhaps the code is incorrect (and not sufficiently unit tested).

Secondly, if the loop is traversed more than once, it appears to me that `candidates` will certainly contain duplicates. Is it really the intention that `len(candidates) < max_candidates` applies to a candidates array that contains duplicates? Why don't we just use `candidates = set()` and `candidates.update` instead of `candidates.extend`? This avoids the overhead of `set(candidates)` in the `n_neighbors` criterion anyway.