During code-gen (for initializers) we need to process module implementation
units differently from interfaces. At present, this is not possible since
the interface module is loaded as representing the "current module scope".
We cannot treat an implementation unit as if it was a regular source, since we
need to track module purview and associate definitions with the module.
The solution here is to create a module type for the implementation which
imports the interface per C++20:
[module.unit/8] 'A module-declaration that contains neither an export-keyword
nor a module-partition implicitly imports the primary module interface unit of
the module as if by a module-import-declaration.
Implementation modules are never serialized (-emit-module-interface for an
implementation unit is diagnosed and rejected).