Split prep

See http://tracker.ceph.com/issues/6978#note-15 and the next couple comments.
this is mutable and might change regardless of the instance, and that would be true both ways (for the parent and the child classes). For example:

    In [1]: class Foo(object):
       ...:     defaults = dict()
       ...:
    
    In [2]: class Bar(Foo):
       ...:     pass
       ...:
    
    In [3]: foo = Foo()
    
    In [4]: foo.defaults[1] = False
    
    In [5]: foo.defaults
    Out[5]: {1: False}
    
    In [6]: bar = Bar()
    
    In [7]: bar.defaults
    Out[7]: {1: False}
    
    In [8]: bar.defaults[1] = True
    
    In [9]: foo.defaults
    Out[9]: {1: True}
    
If mutability is *never* going to happen then this is OK. But the risk is there, and if/when that mutates and it is unexpected it is going to be a pain to track it down.
 
A safer alternative could be to set the defaults every time a new instance is created (via an attribute in `__init__`) but you may have reasons (that are not apparent in this PR) to avoid doing that.