Major speed and accuracy improvements

Rewrote code to minimize temporaries and reuse arrays
For basic algorithms on the Iris, code is 15x faster

We're now using the k-means++ initialization algorithm
to set up initial cluster centers for k-means. This
makes the algorithm 10% more likely to find a solution
near the global minimum

Removed DataFrames dependency

Switched to using OptionsMod to control small options like
tolerance, max iteration and initialization rule