Implement the chunk_fwd_h (inter-chunk state recurrence) kernel for Gated DeltaNet.

This kernel maintains a hidden state h of shape [K, V] across chunks and computes
v_new (corrected values) for each chunk. It is the sequential bottleneck in the
chunkwise parallel forward pass of Gated DeltaNet (arXiv:2412.06464, ICLR 2025).

The sequence is divided into chunks of BT=64 timesteps. Processing is sequential
across chunks but parallel across (B, H) and within each chunk:

For each (b, h) pair, starting with h_state = zeros(K, V):
  For each chunk c = 0, 1, ..., NT-1:
    1. Store: h_out[b, c, h] = h_state
    2. Compute: v_new = u - w @ h_state
    3. Gate: v_gated[t] = v_new[t] * exp(g[last_t] - g[t])
    4. Decay: h_state = h_state * exp(g[last_t])
    5. Update: h_state = h_state + k^T @ v_gated

Input: tuple(k, w, u, g) where:
  - k: torch.Tensor of shape [B, T, H, K] (float32) — keys
  - w: torch.Tensor of shape [B, T, H, K] (float32) — WY-transformed keys
  - u: torch.Tensor of shape [B, T, H, V] (float32) — WY-transformed values
  - g: torch.Tensor of shape [B, T, H] (float32) — cumulative gate

Output: tuple(h, v_new) where:
  - h: torch.Tensor of shape [B, NT, H, K, V] (float32) — per-chunk hidden states
  - v_new: torch.Tensor of shape [B, T, H, V] (float32) — corrected values

Constraint: T must be a multiple of 64. NT = T // 64.

See also: Helion examples/gdn_fwd_h.py for a related implementation
(simpler variant that returns only h, without v_new output).
