fix: remove `kmeans` dependency and implement the algorithm by hand
`kmeans` is fancy but uses SIMD features that are only available on nightly, and there's no way to opt out. I don't want to require people to use experimental features to use this crate, and the algorithm for K-Means is not that difficult to implement, so I just did it myself.
refactor: reverse a bit of the previous overhaul, keeping bounds in the initialization method and in the minimizer is a good idea, but they are not required elsewhere