Since the serialization code would recognize modules by names and the name of all global module fragment is <global>, so that the serialization code would complain for the same module.
This patch fixes this by using a global module fragment cache in Sema. Before this patch, the compiler would fail on an assertion complaining the duplicated modules.
Test Plan: check-all, an internal module library
Typos in "gloabl" and "tranlation" in the comment. Any reason to call this a "cache"? This was confusing to me at first.