Implement a per-token-group FP8 E4M3 quantization kernel.

This is THE standard activation quantization method in production LLM inference
(DeepSeek-V3, Llama 3, Qwen3). It dynamically quantizes activations to FP8
format with per-group scale factors for W8A8 quantized inference.

For each group of `group_size` contiguous elements:
  1. absmax = max(|x_group|)
  2. scale = max(absmax, eps) / 448.0
  3. x_q = clamp(x / scale, -448.0, 448.0)

Where 448.0 is the max representable value in FP8 E4M3 format.

NOTE: Output is float32 clamped to FP8 range (for broad GPU compatibility).

Input: tuple(x, x_q, x_s) where:
  - x: torch.Tensor of shape [num_tokens, hidden_dim] (float32)
  - x_q: pre-allocated output [num_tokens, hidden_dim] (float32)
  - x_s: pre-allocated scales [num_tokens, hidden_dim // group_size] (float32)

Output: tuple(x_q, x_s) where:
  - x_q: quantized values [num_tokens, hidden_dim] (float32, clamped to FP8 range)
  - x_s: per-group scale factors [num_tokens, hidden_dim // group_size] (float32)
