Removes an edge with a given index. An event is sent toward the listeners.
This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedEdge edge = graph.removeEdge(i);
the method will return an ExtendedEdge edge. If no left part exists, method will just return an Edge.
@param index The index of the edge to be removed.
@return The removed edge
@throws IndexOutOfBoundsException if the index is negative or greater than {@code getEdgeCount() - 1}