docs: update quantized cache hqq/quanto examples and documentation
Author: DavidJohnQuinlan
Pull request: yes

<!-- ci-dashboard-badge:start -->
[![CI](https://transformers-ci.lor-e.huggingface.cool/badge/pr?pr=47212)](https://transformers-ci.lor-e.huggingface.cool/d/pytest-observability-by-pr/pytest-observability-branch?var-pr=47212)
<!-- ci-dashboard-badge:end -->

# What does this PR do?
This PR fixes the quantized cache examples in the KV cache (cache strategies) documentation (kv_cache.md). Added hqq missing datatypes (int1/int3). Corrected axis-key and axis-value to axis_key and axis_value, their respective key values. Updated the hqq/quanto examples to include the defined axis_key and axis_value default values as mentioned in the documentation. Removed hanging <hfoptions> tag from documentation and unused QuantizedCache package from hqq example. 

Updated examples have been tested and docs generated locally and evaluated.

## Additional Question:
Given the optimal values for axis_key and axis_value for hqq are both 1, does it make sense to set the default values to 1 in `QuantizedCache.__init__` in the case that axis_key and axis_value are not defined in the cache_config?

## Code Agent Policy
- [x] (First-time contributors only): I confirm that this PR description and code is not written by an LLM or code agent

## Before submitting
- [x] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).

## Who can review?
Documentation: @stevhliu

Comments:
<!-- ci-dashboard-recap:start -->

---

### CI recap

**Dashboard:** [View test results in Grafana](https://transformers-ci.lor-e.huggingface.cool/d/pytest-observability-by-pr/pytest-observability-branch?var-pr=47212)
**Latest run:** [29025392987](https://github.com/huggingface/transformers/actions/runs/29025392987)
**Result:** `success` | Grafana metrics are not available yet.

<!-- ci-dashboard-recap:end -->

@stevhliu thank you for the approval, hopefully the first of many PRs :) 

Sorry I should have been more specific with my question, I was more so thinking about a change in `QuantizedCache` along these lines:

```python
def __init__(
        self,
        backend: str,
        config: PreTrainedConfig,
        nbits: int = 4,
        axis_key: int | None = None,
        axis_value: int | None = None,
        q_group_size: int = 64,
        residual_length: int = 128,
    ):
        if backend == "quanto":
            layer_class = QuantoQuantizedLayer
            default_axis = 0
        elif backend == "hqq":
            layer_class = HQQQuantizedLayer
            default_axis = 1
        else:
            raise ValueError(f"Unknown quantization backend `{backend}`")
        
        axis_key = default_axis if axis_key is None else axis_key
        axis_value = default_axis if axis_value is None else axis_value
```

However, given you have pointed out `QuantizedCache.__init__` should be backend agnostic maybe it is better to just set `QuantizedCache`'s `axis_key` and  `axis_value` default values to None and handle each backends default value in `QuantoQuantizedLayer` and `HQQQuantizedLayer` respectively?

```python
class QuantoQuantizedLayer(QuantizedLayer):
    def __init__(
        self,
        nbits: int = 4,
        axis_key: int | None = 0,
        axis_value: int | None = 0,
        q_group_size: int = 64,
        residual_length: int = 128,
    ):
        super().__init__(
            nbits=nbits,
            axis_key=0 if axis_key is None else axis_key,
            axis_value=0 if axis_value is None else axis_value,
            q_group_size=q_group_size,
            residual_length=residual_length,
        )


class HQQQuantizedLayer(QuantizedLayer):
    def __init__(
        self,
        nbits: int = 4,
        axis_key: int | None = 1,
        axis_value: int | None = 1,
        q_group_size: int = 64,
        residual_length: int = 128,
    ):
        super().__init__(
            nbits=nbits,
            axis_key=1 if axis_key is None else axis_key,
            axis_value=1 if axis_value is None else axis_value,
            q_group_size=q_group_size,
            residual_length=residual_length,
        )
``` 

@SunMarc Let me know what you think and how best to proceed?