Add initial k-means algo
Add non-scipy methods for standard deviation and whiten with tests

The tests compare the new standard deviation and whiten methods to the
existing numpy and scipy methods that are currently in use. Both tests
are passing in this commit.
Use squared Euclidean distance.

Using the squared Euclidean distance is fine for use in k-means and
other problems where the distance is only used for comparison. Using the
squared Euclidean distance has no need for the square root calculation
so this will improve performance.
Handle trivial case(1-dimension) entirely at top of whiten.

If the supplied values only have one dimension then the standard
deviation can be computed without doing any transforms and slicing on
the list so simply compute it and return the list of values divided by
the computed standard deviation for the list as a whole.
Perform a real test for lists, the old test was completely wrong
Add sample data and tests for multidimensional lists.
Add explanation of single dimension lists.
Use SequenceEqual because we care about maintaining order.
Add vector quantization method and tests.

This commit also removes the previous kmeans method. I'll be adding a
new one soon that works based on code books(centroids) and leverages the
newly added vector quantization algorithm.
Add kmeans method and corresponding test.
Separate 1d code into separate tests and raise error on 1d kmeans
Implement find_outliers and add corresponding tests.

This version of find_outliers is meant to replace cluster.find_outliers to
remove all dependencies on numpy and scipy.
Move epsilon outside the class and capitalize to represent constant.
Remove unnecessary conditionals.

These if statements are redundant because we have an assert checking
that the list lengths match already. If the lengths are different then
the test will fail and the if statement will never be reached so, remove
the if statements as they will only be reached if the lengths are equal.
Add new method for comparing sequences of floats.

Also, use the assertAlmostEqual correctly. Previously, I was passing the
minimum acceptable difference(epsilon) but the methods takes the number
of places to require equality in. Update to comapre to 10 places.
Initial implementation of non-num/scipy kmeans_optm from cluster
Add helper methods for dividing lists by scalars and lists
Add test for kmeans_optm
Fix kmeans algorithm.

If no observations are mapped to a cluster then that centroid(codebook
entry) needs to be removed before moving on to the next update step.
This was not happening prior to this commit because the centroid was not
getting set to empty if no observations were found so the empty centroid
culling call was never finding any empty centoids meaning we always
maintained the full codebook(centroid list).
Fix line overruns and add num_places arg to helper test method