Often there will be multiple nodes using BMesh in a row. Currently we
convert from Mesh to BMesh and then BMesh to Mesh for every node.
This patch would allow only converting back to Mesh when necessary, i.e.
when using the attribute API or outputting the result from the modifier.
Theoretically the lazy conversion could be used over multiple modifiers
in the future.
The benefit of this approach is that the lazy conversion happens in both
directions, not just Mesh to BMesh, and that it's at the MeshComponent
level, which simplifies using it, because a node can simply use get_bmesh_for_write().
Another benefit is that it consolidates the boilerplate code from the conversions,
which is quite annoying to write.
I've noticed that the geometry nodes logger gets a list of attributes for every node
in GeometryValueLog which means that currently this patch will only have a benefit
when logging is turned off. I think we should turn off this attribute value logging
for nodes that won't show an attribute list (which should be much simpler in the future
when only a few nodes will have the attribute dropdown!)