fix: emit late tuples as DetachedTuple in WindowedBoltExecutor The late tuple stream emitted the original TupleImpl as a value of the outgoing tuple. TupleImpl references the topology context, which cannot be serialized, so any consumer of the late tuple stream running in a different worker failed with a KryoException. Emit a DetachedTuple copy instead, which survives serialization while still exposing the Tuple interface to consumers.