'Generate a unique shape name.
This method will guarantee a unique shape name each time it is
called with the same type.
>>> s = ShapeNameGenerator()
>>> s.new_shape_name(\'structure\')
\'StructureType1\'
>>> s.new_shape_name(\'structure\')
\'StructureType2\'
>>> s.new_shape_name(\'list\')
\'ListType1\'
>>> s.new_shape_name(\'list\')
\'ListType2\'
:type type_name: string
:param type_name: The type name (structure, list, map, string, etc.)
:rtype: string
:return: A unique shape name for the given type'

def new_shape_name(self, type_name):

    self._name_cache[type_name] += 1
    current_index = self._name_cache[type_name]
    return ('%sType%s' % (type_name.capitalize(), current_index))
