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

I agree that storing hash functions separately is redundant when `GaussianRandomProjection` object can handle hashing of index and queries. But when queries are converted to hash by that `transform`, it will do redundant work because in `_query` method, query is hashed for every tree(estimator) then longest prefix match is found in the same loop. If `GaussianRandomProjection` object is used to transform query into hash, still longest prefix match has to be done in a separate loop. 

I'm not sure I have grasped the idea of using mixin approach here. Can you elaborate a little more about this(and using mixin in general too - the idea behind mixing approach).
Sorry for the trouble.