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 2. The next patch will generalize the code to work on
intervals, to support computation of the limit flow graph.
Differential Revision: https://reviews.llvm.org/D152263