[WIP] K-SVD

Implemented a K-SVD algorithm as a free function.

Notes/questions:
* I haven't done any optimizations yet, but I left TODO-notes in places where it can be done. I am going to profile the code later and see where/if the optimizations are necessary.
* The algorithm currently uses OMP as a sparse coder, and it is possible to make it customizable. However this will make the function interface more complicated (as different sparse coders have different parameters). Should I do it, or should I leave it like this?
* There are now no unit-tests for the implementation, but I am a bit confused on how to create them for such functions. Should I just check the API and simple functions like `_worst_represented_example`?