Add Edge Attributes and Iterators

Essentially, make a duplicate of the Node implementation, but for edges.
Many new naming schemes.

The one thing I didn't duplicate was the three vertical iterators because
those could be interchangeably used between node/edge.