[nnx] Make `nnx.Sequential` iterable and filter `**kwargs` per layer.
Updates `nnx.Sequential` in a minimal, backward-compatible way (`self.layers` remains `nnx.List`) so it can also serve as a container for repeated blocks and post-construction `nnx.scan` transformations:
- **`tp.Iterable`**: Implements `__iter__` delegating to `self.layers`, enabling `for layer in seq:`, `enumerate(seq)`, and `list(seq)`.
- **Per-layer `**kwargs` filtering**: Treats all runtime keyword arguments uniformly via `**kwargs` (including `rngs`), filtering `kwargs` per layer via `_filter_kwargs` so every layer receives the keyword arguments its signature accepts (explicitly or via `**kwargs`), while raising `TypeError` if keys returned in an intermediate `dict` collide with accepted call `kwargs`.
- **Tests**: Adds unit tests in `helpers_test.py` covering `Iterable` iteration, heterogeneous `**kwargs` routing (including call-time `rngs`), unused/conflicting `**kwargs` handling, and repeated decoder blocks with shared `**kwargs` and `nnx.scan` forward/gradient equivalence.
PiperOrigin-RevId: 1007508620