[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.
It is a private function of the module, I though I can be more technically explicit and mention `VALID_WEIGHTS`. (Makes sense?)

But your variant is definitely good for class documentation, I will use it. (Making good sentences is not easy for me.)