Added gradient descent clustering

Added a class that takes the clusterings found by the context-specific
clusterers and prunes them using gradient decent. Also changed matrix
completion task so that it randomizes the order of the choices when it
is instantiated, rather than each time the choices are requested (was
causing issues when I was debugging).