Only doing a sort on mutation in worst case

Instead of storing a list of mutators as {mutator, priority}, then doing
a sort on every retrieval of the list of mutators, the mutators get stored
{Priority, Module}, so the list just gets the priority stripped off (faster
then a sort). This means there's a sort done in the following cases:
 - registering or unregistering a module. There's a check if the module
existed, and it's overwrittne if it did.
 - there are sibling values in metadata. A functionaly equal merge is
done on those values. Hopefully that is a short-lived situation.