rewrite shader_object and program use reference count

1. when a shader/program is first created, its reference count = 0.
2. when a shader is attached to a program, the shader's reference count
increases by 1
3. when a shader is detached from a program, the shader's reference count
is first decreased by 1, then we check whether mark_for_deletion flag
has been set, if yes, the shader is removed from cache
4. when a program is made current (glUseProgram), the new program and its
fragment and vertex shader reference count is increased by 1.  The existing
current program and its fragment and vertex shader reference count
is descreased by 1.  If any of these objects reference count reaches 0,
it is removed from cache
5. when glDeleteProgram is called, the program's reference count is checked,
if it is 0, it is removed from cache, and its fragment/vertex shader
reference count is descreased by 1, and removed if they reach 0.
6. when glDeleteShader is called, the shader's reference count is checked,
if it is 0, it is removed from cache

wip