Feature/setops

(1) stylistic change: rename a functor
(2) re-write existing test cases with degenerate geometries as separate test cases
(3) modify copy segments and follow code to allow the output of spikes
(4) add more tests with degenerate geometries and geometries with spikes