[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.
I wouldn't say that it is a characteristic property of smoothing kernels, The estimate with smoothing kernels is less bumpy and more smooth than with uniform weights and that's all. (Why did you imply that 'uniform' forces the line to go through training points?) 

And 'distance' shows this weird property, that the line have to pass through every training point. (Which again the argument not to use it all.)