Represents a graph element. Currently elements are either vertices or edges.
Different elements in the same graph should be represented by different objects.
Graphs are allowed to share vertices when this is meaningful, e.g., when both
are subgraphs of the same graph.