[WIP] Added kernel weighting functions for neighbors classes

This patch enables the use of kernel functions for neighbors weighting.

It adds the following keywords for ``weights`` argument: ``tophat``, ``gaussian``, ``epanechnikov``, ``exponential``, ``linear``, ``cosine``, i.e. all kernels presented in ``KernelDensity`` class.

For ``KNeighborsClassifier`` and ``KNeighborsRegressor`` the kernel bandwidth is equal to the distance to the k+1 nearest neighbor (i. e. it depends on a query point).

For ``RadiusNeighborsClassifier`` and `` RadiusNeighborsRegressor`` the kernel bandwidth is equal to the radius parameter of the classifier (i. e. it is constant).

Please, take a look.
Unfortunately it occurs with `RadiusNeighborsClassifier`: the number of neighbors is not fixed and numpy can't convert an array of different size arrays to a 2-D array. I don't know what we can do with that.