Considerations around split polygons being an array, not individuals and a new free_poly()

The new free poly takes a second parameter to ask to free itself instead of it's slots.
This is used to cleanly deallocate split polygons