INamingScope
Represents the scope of uniqueness of names for types and their members
Gets a unique name based on suggestedName
Returns new, disposable naming scope. It is responsibility of the caller to make sure that no naming collision
with enclosing scope, or other subscopes is possible.