'Relabels the alias values of any children. \'change_map\' is a dictionary
mapping old (current) alias values to the new values.'

def relabel_aliases(self, change_map):

    for (pos, child) in enumerate(self.children):
        if hasattr(child, 'relabel_aliases'):
            child.relabel_aliases(change_map)
        elif isinstance(child, (list, tuple)):
            child = ((child[0].relabeled_clone(change_map),) + child[1:])
            if hasattr(child[3], 'relabeled_clone'):
                child = ((child[0], child[1], child[2]) + (child[3].relabeled_clone(change_map),))
            self.children[pos] = child
