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

For an array (like we have after random projections, `a = np.array([1, 0, 1]).astype(int)`), it is represented as raw data bytes. So for each element there will be 8 values. So for the above array, what we get is:
```
'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00'
```
How can this be used when we want is something like `'101'`? 
(It can be used in string comparison, but there will be alot of redundant comparisons then)

Besides, in my earliest commits I have used the string comparisons for this (see [8c396e7](https://github.com/maheshakya/scikit-learn/commit/8c396e7ddf0613d336e75b1647c49475ddfc8db6) ) and found it was much slower than the current method.