A metaclass to allow to define read-only class attributes, accessible either on the class or it’s instances
and protected against re-write or re-definition.
Read only attributes are stored in the class ‘__readonly__’ dictionary.
Any attribute can be marked as read only by including its name in a tuple named ‘__readonly__’ in the class
definition. Alternatively methods can be marked as read only with the @readonly decorator and will then get
added to the dictionary at class creation