keyed first on namespace then on type name. The namespace is often a unique key for a given type map.
Note: an abbreviation for Map<stringlist,Dictionary<string,Lazy<ILTypeDef>>>
A little ugly, but the idea is that if a data structure does not
contain lazy values then we don't add laziness. So if the thing to map
is already evaluated then immediately apply the function.