Properly handle shader deletion

When deleting a shader that is still attached to program,
it should not be deleted immediately. Instead, it should
be marked for deletion.
When a program is deleted, its shaders should be detached.
When a shader is detached, it should be deleted if it is
marked for deletion.

Change-Id: I481dbfe37e3ad4af454574b75d157bdfeb1c9cdd
(cherry picked from commit bc42a0598f6e5ffb0ebd646e0bad8d94c50ec193)
3 files changed