Use OrderedDict to preserve part order (roll our own if the one added to collections in 2.7 isn't available)