Give back every place a run of clicks names, and keep what the answer still holds
Fixes the two halves of #3616626.
The endpoint. PlaceSelectionController::places() collects every place the request gives back before acting on any of them, and passes that set to releaseInstead(). A place also leaving stays in the row, where it is about to be available and can close a gap, but it is out of the party: it is not somebody's seat to keep together, and handing it back "instead" would give one place back twice and leave the clicked one held.
The map. forgetTheBasket() keeps what the same answer speaks about: a place it names as the booker's own, and an area it counts. An answer cannot both state that a place is held and mean that the basket holding it has gone.
Tests. PlaceBookingTest::testGivingBackBothPlacesGivesBothBack and ::testGivingBackTwoOfThreeGivesBackThoseTwo cover the loud and the silent form; both were watched failing against the unfixed source (the second released place 5 where the click named place 3). VenueMapPickerTest::testGivingBothPlacesBackGivesBothBack makes the gesture through the panel and pins that one request carried both, and ::testThePlaceTakenBesideTheBasketThatWentIsKept pins the map's half. Both were watched failing too.
Placement kernel suite 63/63, VenueMapPickerTest 37/37, phpcs/phpstan/eslint/cspell clean. docs/seating.md states the whole-request rule. No new translatable string.