The main motivation for this is that it's part of a fix for #113377,
where I want to propagate the edit mesh pointers through copied mesh
in the modifier stack and geometry nodes, instead of just setting the
mesh's edit mesh pointer at the end of the modifier stack. That would
have two main benefits:
1. We avoid the need to write to the evaluated mesh, which means it
can be shared directly among evaluated objects.
2. When an object's mesh is completely replaced by the mesh from another
object during evaluation (with the object info node), the final edit
mesh pointer will not be incorrect, allowing us to skip index-mapped
GPU data extraction.
Beyond that, using a shared pointer just makes things more automatic.
Handling of edit mesh data is already complicated enough, this way some
of the worry and complexity can be handled by RAII.
One thing to keep in mind is that the edit mesh's BMesh is still freed
manually with `EDBM_mesh_free_data` when leaving edit mode. I figured
that was a more conservative approach for now. Maybe eventually that
could be handled automatically with RAII too.