*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.
