Sparse operations

Fixed some math errors in the kernel computation.  Should be correct
up to passing the affinity matrix to spectral_embedding.  Also changed
the kernel to compute final dot products with sparse matrices and return
a sparse affinity matrix.  This shows massive speedups, but the embedding
is still very slow.  Replacing the scikit-learn spectral_embedding function
is probably correct, as it makes unneccesary, and possibly erroneous, assumptions
about the problem it's being applied to.