Performance fixes for large dataset

Optimized the distanceMap.remove(Pair) code. With a large dataset, this
method was constantly iterating over a 2 million plus arraylist.
Replaced with priority queue which also keeps it properly sorted. Only
hack is the removal code, which is synthesized with a removed flag.
Changed Cluster to use name field as hashCode/equals

Removed extra toString() invocation on Cluster's hashcode and equals
method