usbd: hold OUT endpoints with RX_PENDING until the buffer is consumed

A per-endpoint state bit replaces the single rx_cb_ep slot and the OUT-only claim path. XFER_COMPLETE frees BUSY|CLAIMED and sets RX_PENDING in one store, so there is no window in which another task can claim the endpoint and re-arm into ep_buf before the class copied it (#1292). MIDI releases the pending buffer before re-arming after a failed OUT transfer.

test_usbd builds with TUP_MCU_MULTIPLE_CORE=1 so the claim mutex path is compiled and exercised.
10 files changed