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

The bit permutations would be best done not as matrix multiplies, but as bit operations in C. Even if performed as multiplies over binary matrices, these matrices don't have the full feature-space dimensionality, only a fixed width of 32, so we should expect it to be much faster than additional random projections.

I can't recall where I've seen this technique used, but I don't think it involves a quantification of the sharing effects. Some colleagues were playing around with this variant, but I'm not sure if they have useful numbers in this space. However, traditional (bucket-based, rather than forest-based) LSH, in my understanding, is often described in terms of selecting a fixed number of bits from a random projection to represent one hash. This should be equivalent to permutation, and given the number of possible permutations, should still provide the additional recall that creating multiple indexes intends.