Tests 04 and 05 exposed bugs in how DisjointSet.Union() was updating node ranks. Fixed. TODO: prove that rank is maintained correct for any combination of Unions. My intuition tells me it is as long as the starting 'trees' are valid. i.e. there is no correction code for broken trees, but it will create valid trees from scratch.