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

I don't see why still requiring a loop means that the work will be redundant. I appreciate that all queries' hashes could be stored in memory even while only one at a time is being handled, but I don't see a problem in that.

A mixin might not be the best approach, but its basic idea is to ensure consistent vector-to-hash behaviour whether it is being built on top of `GaussianRandomProjection`, `SparseRandomProjection` or some data-dependent projection scheme. A mixin's role is to provide some amount of functionality that can be adopted by inheritance, and scikit-learn uses them in a number of places (`ClassifierMixin` defines a `score` method for all that inherit from it; `TransformerMixin` defines `fit_transform`; `AgglomerationTransform` turns a clusterer over samples into a clusterer over features and transformer; `_LearntSelectorMixin` transforms an estimator with a measure of how important each feature is into a feature selector). The same capabilities can be achieved by nesting: e.g. a feature selector class wraps around the classifier. However, this adds indirection for users wanting to access the underlying classifier and its attributes, and the wrapping class needs to define its methods as calling the methods of the underlying classifier, so there's a lot of tricky code involved. Here a nesting approach could be used too, but is ugly for similar reasons.

The important parts of how this mixin work are that:
* `self.fit(X)` looks for that method on `self`; if `self` is of type `GaussianRandomProjectionHash`, the `GaussianRandomProjection.fit` is called.
* `self.transform(X)` similarly looks for the method, but finds it in `ProjectionToHashMixin`, hence ensuring the output of `fit_transform` is in the hash space.
* where `self` is of type `GaussianRandomProjectionHash`, `super(ProjectionToHashMixin, self).transform` will look for `transform` in the classes that `GaussianRandomProjectionHash` inherits from, and in this case will find it in `GaussianRandomProjectionHash` (in particular, it does not find the `transform` on `ProjectionToHashMixin` itself).

HTH.