KDTree implementation

I've added a basic KDTree implementation and modified 'knn' function so it could accept different types of data structures for keeping training data. Plus, some requirements, dependencies and tests clean up.