[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.
>  1. Kernels perform different depending on data. And we don't know which one
>     would be the best a priori.

Of course, and it should be mentionned in the docs. That said, giving a
few intuitions is useful. For instance, some kernels will give a much
smoother behaviors than others. 

>  2. As ‘gaussian’, ’tophat’, ’epanechnikov’, ’exponential’, ’linear’ and
>     ’cosine’ are implemented in KernelDensity it would be only logical to
>     implement them as weights as kNN.

Granted, but we are not trying to write an encyclopedia, just trying to
provide a useful data processing tool (which is by itself a challenge).

> Being more constructive: maybe some example which shows the accuracy increase
> with kernels will do?

That would be absolutely awesome! We do realize that it may not be easy
to come up with such example, but the value to the user is huge.