[SYCL] Make ipc::event::put() optional (#22845)
`put()` is already specified as optional for ipc::memory and
ipc::physical_memory, so align specification and implementation of
`ipc::event` to have same behaviour.
Cache the exported IPC event handle on event_impl the first time
`ipc::event::get()` is called, and release it in `~event_impl` via
`urIPCPutEventHandleExp`. This makes calling `ipc::event::put()`
optional. `ipc::event::put()` becomes a no-op.
Assisted-By: Claude