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

I think the priorities now should be making the code easy to merge and maintain, and removing serious problems (like an insert that takes O(nm) instead of O(n+m)). 

I would specifically avoid micro optimizations: it takes some time to find where to optimize, try it out at different parameter values etc... and I'd guess they are relatively easy to add after GSOC if we want. Right?