[ADT] Implement the Waymarking as an independent utility
This is the Waymarking algorithm implemented as an independent utility.
The utility is operating on a range of sequential elements.
First we "tag" the elements, by calling fillWaymarks.
Then we can "follow" the tags from every element inside the tagged
range, and reach the "head" (the first element), by calling
Differential Revision: https://reviews.llvm.org/D74415