This also comes out of the discussion for #592. @kno10's suggestion is that we simply pick points randomly from the dataset as initial centroids.
This requires a bit of refactoring because the current initialization policy operates by setting the assignments of each point, instead of the location of each centroid. So there will need to be a little bit of thought on how exactly to handle this, but probably some template metaprogramming to handle both cases is in order here (so that a user can both write initialization policies that give initial point assignments and also initial centroids).
I will do this as I have time.
This has been done in a38608b and the k-means program now defaults to this type of initialization. Thanks again @kno10 for pointing this out. :)