Overrides the default `treebeard` function, adding additional integrity checks.

def add_child(self, arc_element_type, description=None, story_element_node=None, **kwargs):
        '''
        Overrides the default `treebeard` function, adding additional integrity checks.
        '''
        if 'mile' in arc_element_type:
            if 'mile' in self.arc_element_type:
                raise ArcGenerationError('You cannot have a milestone as a child to another milestone.')
            if self.get_depth() == 1:
                nodes_to_check = self.get_descendants().filter(arc_element_type__icontains='mile')
            else:
                nodes_to_check = self.get_root().get_descendants().filter(arc_element_type__icontains='mile')
            for node in nodes_to_check:
                if node.arc_element_type == arc_element_type:
                    raise ArcIntegrityError('You cannot have two of the same milestone in the same arc.')
        return super().add_child(
            arc=self.arc,
            arc_element_type=arc_element_type,
            description=description,
            story_element_node=story_element_node
        )