text: Title: [Feature]: Consolidate `LRUCache` implementations
  Body: ### 🚀 The feature, motivation and pitch
  
  #14805 introduced `cachetools.LRUCache` to support different size for each item and prepare for a thread-safe implementation. On the other hand, the code under `vllm/adapter_commons` uses the existing `vllm.utils.LRUCache`. To clean up the code, we should consolidate these implementations inside `vllm.utils.LRUCache`. This cache should support the following features:
  
  - Pinning specific items in the cache (the existing `vllm.utils.LRUCache`)
  - Custom function to compute the size for each item (`cachetools.LRUCache`)
  - Custom callback functions when an item is removed (`vllm.adapter_commons.AdapterLRUCache`)
  - The cache should remain compatible with `collections.abc.MutableMapping` interface so it can be passed to `cachetools.cached` to make it thread-safe.
  
  ### Alternatives
  
  Keep the two implementations separate. However, this may cause confusion since the two classes share the same name.
  
  ### Additional context
  
  _No response_
  
  ### Before submitting a new issue...
  
  - [x] Make sure you already searched for relevant issues, and asked the chatbot living at the bottom right corner of the [documentation page](https://docs.vllm.ai/en/latest/), which can answer lots of frequently asked questions.