A bit of renaming to match the names of 3D DSC.
Split the remove degenerate faces into two methods for removing degenerate edges and faces respectively.

Also tries to collapse the edge/face safely.
Simplified the fix_complex and resize_complex methods.
Added a utility function which calculates the intersection between a ray and a line and uses this when calculating the intersection with the link.

Consequently, the intersection with the link function now calculates
the convex hull of the node.
Simplified the move_vertex function and does not move a vertex more than halfway towards its maximum move distance.