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