ports: treat ports as a new network entity

Previously, the only way to add a port to a vertex was to add an edge connecting two vertexes. Now, a user can add and remove ports independent of the edges in the network.

Related to #51.