Inserts given child at given index.

        Usage::

            >>> node_a = AbstractCompositeNode("MyNodeA")
            >>> node_b = AbstractCompositeNode("MyNodeB", node_a)
            >>> node_c = AbstractCompositeNode("MyNodeC", node_a)
            >>> node_d = AbstractCompositeNode("MyNodeD")
            >>> node_a.insert_child(node_d, 1)
            True
            >>> [child.name for child in node_a.children]
            [u'MyNodeB', u'MyNodeD', u'MyNodeC']

        :param child: Child node.
        :type child: AbstractNode or AbstractCompositeNode or Object
        :param index: Insertion index.
        :type index: int
        :return: Method success.
        :rtype: bool

def insert_child(self, child, index):
        """
        Inserts given child at given index.

        Usage::

            >>> node_a = AbstractCompositeNode("MyNodeA")
            >>> node_b = AbstractCompositeNode("MyNodeB", node_a)
            >>> node_c = AbstractCompositeNode("MyNodeC", node_a)
            >>> node_d = AbstractCompositeNode("MyNodeD")
            >>> node_a.insert_child(node_d, 1)
            True
            >>> [child.name for child in node_a.children]
            [u'MyNodeB', u'MyNodeD', u'MyNodeC']

        :param child: Child node.
        :type child: AbstractNode or AbstractCompositeNode or Object
        :param index: Insertion index.
        :type index: int
        :return: Method success.
        :rtype: bool
        """

        if index < 0 or index > len(self.__children):
            return False

        self.__children.insert(index, child)
        child.parent = self
        return child