Replays GPS points from a GPX track file.
Expects state.gpx_data to be a list of remaining %Gpx.GpsPoint{}
structs (loaded by the worker). Each call pops the next point and updates
state.gps.
When the track is exhausted, sets halted: true on the pipeline.
Timing is owned by the worker loop (interval: :gpx_time or fixed ms).