addEdge(source, destination) {
    const sourceNode = this.addVertex(source); // <1>
    const destinationNode = this.addVertex(destination); // <1>

    sourceNode.addAdjacent(destinationNode); // <2>

    if (this.edgeDirection === Graph.UNDIRECTED) {
      destinationNode.addAdjacent(sourceNode); // <3>
    }

    return [sourceNode, destinationNode];
  }
Create a connection between the source node and the destination node.
If the graph is undirected, it will also create the link from destination to source.
If the nodes don't exist, then it will make them on the fly.
Runtime: O(1)
@param {any} source
@param {any} destination
@returns {[Node, Node]} source/destination node pair