Rework `chain::Watch` return types to make async updates less scary