updates to your LSH

I found your implementation of LSH and started using it.  As I fixed a few bugs, I started refactoring and adding some additional features (such as pluggable minhash algorithms, a multiply hash algorithm alongside xor algorithm).  

I created some tests as well, and finally a small utility to see how the implementation of lsh compares to theoretical expectations.

There have been some big changes, so I'm not sure you'll want to roll them in, but since I found your code useful as a jumping off point, wanted to let you evaluate if you like the changes.

Thanks