This change adds:
- Verify all DIEs with address ranges have valid ranges
- If a CU has a low/high PC or has a DW_AT_ranges, then verify that and DW_TAG_subprogram is completely contained in the CU ranges
- Keep a list of all address ranges for any DW_TAG_subprogram DIEs and verify none overlap
- verify that all DW_TAG_lexical_block and DW_TAG_inlined_subroutine address ranges are completely contained in the parent address ranges
Does this class need to exist? I'm not sure it adds much of an improved abstraction boundary compared to being an implementation detail of DieRangeInfo?