add nearest neighbors

We try to find the KNN candidates of query set Q for each tile of X.
Then aggregate the KNN candidates back to master and then find the true KNN.
For each kernel, we run sklearn KNN locally.