Problem
The tmx granule is ported (#1359) but ships standalone, with its own state
objects and savepoint tests. It is not wired into anything that runs. The
PhysicsDriver already runs muphys as a Component; tmx needs the same treatment.
Solution
Wrap the granule as a second Component behind the existing driver protocol, using
the adapter shape muphys uses, so that re-merges of the still-moving #1359 stay
clean. The data flow mirrors muphys: collect_inputs binds the frozen EntryState
and derives air_mass and cv_air and runs the surface-flux provider, the component
call wraps tmx.run() which returns tendencies, and the tendencies are accumulated
and applied once.
Verified by running a full APE_aes with muphys and tmx against
exclaim_ape_aesPhys_v08.
Progress
#1360 is based on port_turbulence rather than on main, so it lands only after
the tmx port itself does. The two-layer physics state it builds on is #1436,
which is cycle 38's own bet.