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

calling `np.array` on this return value means that if the data *happens* to produce an equal number of neighbors for each query item, it will return a 2d array, while otherwise it will return an array of arrays. Either we should return a list of arrays, or for consistency with `RadiusNeighborsMixin`, we should return an array of arrays, but in both `radius_neighbors` implementations we need to ensure (i.e. fix and ideally test) that we are not returning 2d arrays. The fix can use something like:
```python
def _array_of_arrays(list_of_arrays):
    out = np.empty(len(list_of_arrays), dtype=object)
    out[:] = list_of_arrays
    return out
```
which will keep things safe.