Given an object scope, generate names that is not only unique within the scope, but also unique among all names generated before. Note: It uses GetUniqueNameForScope so using the same scope object and the same input name does not guarantee the same output name