Issue #3620444: Add the structure configuration entity
A structure - the map from an entity's fields to the keys of a response - now lives where a human can review it, a form can write it and a deployment can carry it. Configuration entities are what the core provides for exactly this, and export, import and diffing in review came free.
The identifier is entity_type.bundle.role rather than a free name, because that is how structures are looked up: a card names the one it renders its target by, and a generator has to find the description of a bundle it just scanned. Both ways of asking are answered - get() by ID, forBundle() by what you are looking at.
Three things happen between the file and the array the engine is handed, and all three are the repository's rather than the entity's: a parent is resolved so that a teaser does not repeat the detail it is a subset of, the settings of a shape are flattened out of the key that keeps them readable in an export, and the alter hook fires - after both, so a site sees the structure as it will be built.
The hook is hook_myrest_structure_build_alter(). The name the plan promised has belonged to the alter of paragraph structures since before structures were configuration; it is @api and implemented by sites, and taking it would break them silently, which is the worst kind of change because both hooks would look right. Renaming the older one belongs to the next major release.
A property whose source is a service call is validated on save, which is what issue 127 asked for and had nowhere to call from: the check existed, and a structure was an array in code. Saving one that names a service nobody tagged now fails with the reason in words.
Saving or deleting a structure drops what the repository read earlier in the request: the person who just pressed save is the last one who should see the old description.
Closes #3620444