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.