Introduce notion of edge traversal anomaly

Suppose we ask for an outgoing edge on a label which indicates
one-to-one but the engine gives us more than one. We'd like to inform
the user somehow, but not just throw an error/exception. We choose to
wrap the output of getEdgesOut/getEdgesIn in the monad Either Anomaly so
that if there is ever an edge cardinality anomaly in a query, the query
is junk.

Moving forward, we might want to implement graph mutations in our
language as well, and provide a guarantee that these label constraints
hold at data commit time. The anomaly notion will still be relevant,
though, since committed data could still be corrupted.
PureGraph.hs example updated