[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.
Well, I don't see any discussion about different kernels in kernel density estimation section. And, as another example, in the section about SVM nothing is told about how to chose a (feature mapping) kernel. 

I mean that often it is hard to give general recommendations in machine learning. I would say that all kernels (except 'tophat') are very similar, on a particular data set one or another might work better.

Why do we need different kernels in kNN than? I give two arguments:

1. Kernels perform different depending on data. And we don't know which one would be the best a priori. On LandSat data the accuracy increase with the best kernel was about 2 percent compared to 'uniform' and 'dist', which is not bad.

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. 

---

Being more constructive: maybe some example which shows the accuracy increase with kernels will do? 

Сan you suggest something to write about motivation of using kernel weights for kNN classification / regression?

Meanwhile I will think about that.