Currently accessing these three separate boolean layers can actually _create_ other attributes. Currently this can cause a crash because it invalidates the pointers to other CustomData layers. But it's also just logically wrong. Instead add functions `vertex_selection_ensure()`, `edge_selection_ensure()` and `pin_ensure()` to get the old behavior, and make the property access just give empty collections if there is no boolean layer. Part of #145877. Pull Request: https://projects.blender.org/blender/blender/pulls/146611