Make insert_child() create children that don't yet exist on the way down.
Whether a child can be inserted at that place should be defined by specific
subclass semantics.
Remove **kwargs from method signatures, setting additional attributes
will be handled by separate functions.
Add properties attribute and getter/setter.