Improve IntoEdgesDirected and edges_directed for undirected graphs

This aligns edges_directed for undirected and directed graphs: in particular,
for incoming edges, the provided node will always be the target.

The `Edges` iterator implementation wasn't well suited for this change, so I
ended up rewriting it in what should hopefully be a more understandable
fashion.

This is a breaking change -- third-party implementations of IntoEdgesDirected
may have to be updated.

This allows implementing `IntoEdges` and `IntoEdgesDirected` for reversed
graphs -- that will be done in the next commit.
6 files changed