*Title: Checking of class removal Incentive: Add some checking to the removal of classes, if the class is considered a system critical class it should not be allowed to be removed. *Documentation: Reasons for a class to be system critical: - It is being used by a top-level node, removing it will result in the removal of the top-level node which will cause the system to malfunction. The only way to remove this class then is to first to swap the top-level node with another node which uses a different class. - One of the attributes cannot be removed, possible reasons: ezuser: - The current user, admin user or anon user is made with this class, removing the class or attribute will remove the user or make them invalid as a user. - There are no more classes with this datatype, if no classes has this it will not be possible to login or access the site anymore. The only way then is to add some fields manually to the database. In eZContentClass two new methods has been added to perform these checks, - isRemovable() returns true if the class can be removed, the existing method remove() will use this to now allow removal of critical classes. Uses removableInformation() to figure it if it is possible. - removableInformation() returns a list of reasons why the class cannot be removed (if any) In eZDataType two new methods has been added to allow certain datatypes to perform these checks. - isClassAttributeRemovable() returns true if the class attribute can be removed, the default implementation will use classAttributeRemovableInformation to figure this out so it is not required to reimplement. - classAttributeRemovableInformation() returns a list of reasons why the class asttribute cannot be removed (if any) It returns false by default and must be reimplemented by datatypes which should do these checks.