[SYCL] Fix asynchronous exception behavior (#20274)
This commit makes the following changes to the behavior of asynchronous
exception handling:
1. The death of a queue should not consume asynchronous exceptions.
2. Calling wait_and_throw on an event after the associated queue has
died should still consume exceptions that were originally associated
with the queue. This should respect the async_handler priority to the
best of its ability.
3. Calling wait_and_throw or throw_asynchronous on a queue without an
async_handler should fall back to using the async_handler of the
associated context, then the default async_handler if none were attached
to the context.
4. Throwing asynchronous exceptions from anywhere will now consume all
unconsumed asynchronous exceptions previously reported, no matter the
event/queue/context/device.
Additionally, this lays the ground work for
https://github.com/intel/llvm/pull/20266 by moving the tracking of
unconsumed asynchronous exception to the devices.
---------
Signed-off-by: Larsen, Steffen <steffen.larsen@intel.com>