Don't use a midpoint sorted edge tree

This is work to change the edge tree from one that uses a midpoint to sort and compare to one that does not, because that's a terrible idea to begin with.

In this version an edge `AB` is expressed as two nodes. The `Origin` node is the node that stores `A`, which is always `A < B`. The origin node keeps a vertex-tree like structure of `Endpoints` which then store the point `B` in a tree.

The `Endpoint` nodes of an edge will store the polygon list. This structure is more general and allows robust tests for  identity, and should be more flexible in the expression of abnormal edges like the ones I've been running into with #38 [e.g. `AB` where `A=B` :trollface:]

**This PR targets #38**