Issue #3611637: Add yoyaku_seating (numbered/assigned seats) and a generic booking values seam
Validates and implements the dedicated seat model.
Core seam (generic, engine stays seat-agnostic): hold()/book()/holdGroup() take an optional per-booking values payload merged onto the booking, and BookingConstraintInterface::check() receives it, so a constraint can vet the reservation under the slot-row lock.
yoyaku_seating submodule: a yoyaku_seat entity (physical unit of a resource/venue, with a section and allowed categories, no price), a seat reference added to bookings, and a SeatBookable constraint enforcing (a) the seat allows the chosen category and (b) the seat is sold at most once per slot across every category. Category quotas stay independent. Kernel test proves all three.
Booking a seat = (slot, category, seat). Prerequisite for tickets (#3611638) and check-in (#3611639). Follow-ups: seat picker UI, seat-map, and per-slot section enable/disable for multi-configuration venues.