KNN, Metrics and interface design

I've refactored the KNN example to use mat64, and an implementation of @lazywei's distance metrics. It also includes basic ideas for interfaces that our objects should implement. There are still optimisations to be made on the KNN object, and it would be useful to accompany it with a benchmark. Let me know your thoughts, otherwise, please merge.