[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.
Now it goes like this: `_get_weights` -> `_check_weights`. There wasn't  a check for `weights` in `__init__`, and I didn't add it.

I don't completely understand the policy of parameters check in `__init__`. According to guidelines nothing should be done / checked in `__init__`, because of cloning and `set_params`. But in some classes (like `KNeighborsClassifier`) some checks are performed regardless.