'Initializes a class that might have property definitions.
This method is called when a class is created with the PropertiedClass
meta-class.
Loads all properties for this model and its base classes in to a dictionary
for easy reflection via the \'properties\' method.
Configures each property defined in the new class.
Duplicate properties, either defined in the new class or defined separately
in two base classes are not permitted.
Properties may not assigned to names which are in the list of
_RESERVED_WORDS.  It is still possible to store a property using a reserved
word in the datastore by using the \'name\' keyword argument to the Property
constructor.
Args:
cls: Class being initialized.
name: Name of new class.
bases: Base classes of new class.
dct: Dictionary of new definitions for class.
Raises:
DuplicatePropertyError when a property is duplicated either in the new
class or separately in two base classes.
ReservedWordError when a property is given a name that is in the list of
reserved words, attributes of Model and names of the form \'__.*__\'.'

def __init__(cls, name, bases, dct, map_kind=True):

    super(PropertiedClass, cls).__init__(name, bases, dct)
    _initialize_properties(cls, name, bases, dct)
    if map_kind:
        _kind_map[cls.kind()] = cls
