Improve plugins.customEdgeShapes

Refactor the plugin for better modularity and less magic.

Also adds `sigma.utils.getCircleIntersection` as a geom function because it is shared by multiple edge renderers.