Introduce symbol table data structures that can be potentially written to
disk, have the LTO library build those data structures using temporarily
constructed modules and redirect the LTO library implementation to go through
those data structures. This allows us to remove the LLVMContext and Modules
owned by InputFile.
With this change I measured a peak memory consumption decrease from 5.4GB to
2.8GB in a no-op incremental ThinLTO link of Chromium on Linux. The impact on
memory consumption is larger in COFF linkers where we are currently forced to
materialize all metadata in order to read linker options. Peak memory consumption
linking a large piece of Chromium for Windows with full LTO and debug info decreases
from >64GB (OOM) to 15GB.
Part of PR27551.