added reference counting on shader objects, clean up on shader destruction