Added some optimization code:
   - Cluster comparison now maintains similarities, so that it is only computed
     if two clusters have never been compared.
   - Isolates now maintain isolate similarities so that pearson correlations
     only need to be computed during the first iteration.

I believe it is still possible to optimize the clustering process itself. I
would like to implement clustering as checking the cross product of the initial
cluster set (each data point) and then only look at distances for candidates
that may potentially be matched.

Also, added an indicator to AnalysisWorker to show clustering progress