computeColors

Determine colors for all registers. We use a simple coloring algorithm here, since both L2 and the JVM have an effectively unbounded number of virtual registers, and we're merely interested in keeping the color count as reasonably close to minimal as we can.

The algorithm repeatedly chooses the registerSets having the least number of interfering edges, pushing them on a stack and removing the vertex (registerSet) and its edges. We then repeatedly pop registers from the stack, choosing the lowest available color (finalIndex) that doesn't conflict with the coloring of a neighbor in the original graph.