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
Might be tidier to make this a struct with a couple of functions:
That way the function names don't have to repeat the "DWARFRange" prefix.