[Reland][Offload][Omp] Destroy programs when unregistering images (#242222)
Currently we are creating liboffload programs with olCreateProgram but
we never destroy them. The natural place to do this is when
unregistering an image or, at the latest, when a device is deinitalized.
Also, fix a bug in liboffload where destructors were not called if a
Program was destroyed through olDestroyProgram and add a test for it.
Assisted by Claude.