MRG constant-space cluster reassignment in minibatch k-means

I just ran into a `MemoryError` while clustering batches of 10k samples with >250k features (CSR matrices, of course) into 500 clusters with `MiniBatchKMeans`. It turns out that the line

    distance_to_centers = np.asarray(centers[nearest_center] - X)

in the random reassignment creates **two** dense arrays of size equal to my minibatches. I rewrote the squared-distance-to-centers code in Cython to take only constant space apart from the size of the output, and did the dense version too while I was at it.

There was already a test for this, which passes, but I added an extra one. I can now run `partial_fit` on 24 size-10k batches in less than 2 minutes, which includes I/O, feature extraction and two reassignments on a low-powered workstation without any trouble.

CC @pprett, @ogrisel.