roles: fix IronPython issue

Some role tests fail for IronPython because IronPython does not
expose descriptors in dictproxy iteration.

To work around this issue, save a snapshot of the role dict prior to
calling type.__new__ and use this snapshot when composing roles into
classes.