This moves responsibility of generation to the calling code, removes it
from the join strategies. It also enables using the end-strategy for the
spikes
there was no segment in between generated, therefore if the side-segments
did not intersect (e.g. donut_diamond in polygon_buffer.cpp unit test),
there was no intersection at all. Now a helper piece is generated and it
will intersect.