when getting cache for renderbuffer, shader object, texture and
array buffer, we must call it recursively on shared context
we don't maintain two caches for array_buffer and element_array_buffer,

Use one single array_buffer_cache that is shared among shared contexts.
This is because although element array buffer is not shareable, but
during creating buffer, we don't know whether it is array buffer or
element array buffer