Review follow-up for #15127:
- Write the surface file to <project>_surfaces/<name>_<file id>.ts. The file
id is created once per surface and renewed on copy, so names that sanitize
to the same string, user files of the same name and a project saved under
another name in the same folder no longer overwrite each other.
- Track changes since the last save, and keep the in-memory data on reload
until it has been written.
- Reject property names that are empty or contain whitespace, as the GOCAD
TSurf file separates names by spaces.
- set_property raises when there is no parent project, like the other calls.
- Null check before the assert in setProperty, fix the triangleIndices typo.
Add TriangulatedSurface with set_geometry, set_property, get_property
and available_properties, created by
SurfaceCollection.new_triangulated_surface. When the project is saved,
the surface is written as a GOCAD TSurf file next to the project file
and read back from that file when the project is opened.