Adds support for the classic dataflow algorithm that partitions a flow graph
into distinct intervals. C.f. Dragon book, pp. 664-666.
A version of this algorithm exists in LLVM (see llvm/Analysis/Interval.h and
related files), but it is specific to LLVM, is a recursive (vs iterative)
algorithm, and uses many layers of abstraction that seem unnecessary for CFG
purposes.
This patch is part 1 of N. Subsequent patches will generalize the code to work
on intervals to support computation of the limit flow graph.
A concise definition of what is an interval with a reference to the dragon book might be useful here.