This is a first pass at bringing some work that has been done on assisting the Machine Outliner with cross module outlining decisions. A lot of this work is inspired by or directly refactored from the Global Machine Outliner for ThinLTO talk from EuroLLVM 2020 (https://llvm.org/devmtg/2020-04/talks.html#TechTalk_58).
In this diff however, there is no LTO: This diff enables a way to serialize a representation of the MachineOutliner suffix tree as a HashTree to disk. Serialized HashTrees can be read in and used to aid in making better outlining decisions for modules where a Candidate sequence only occurs once, but which have duplicate Candidates off module. This is a first step and I anticipate this will evolve a lot from its current form.
For now I have a single test case to showcase the mechanics, but am working on more test cases.