This fixes: https://bugs.llvm.org/show_bug.cgi?id=52281 and https://godbolt.org/z/81f3ocjfW.
This patch introduces a new kind of ModuleOwnershipKind as ReachableWhenImported. This intended the status for reachable described at: https://eel.is/c++draft/module.reach#3.
Note that this patch is not intended to support all semantics about reachable semantics. For example, this patch didn't implement discarded declarations in GMF. (https://eel.is/c++draft/module.global.frag#3).
According to my experience, this patch is important to use C++20 module actually. After this patch, people should be able to start to use module in practice. (There may be other bugs. I know some too).
Test Plan: check-all and https://godbolt.org/z/81f3ocjfW.