N_SrfRemoveKnotsConstraints differs from N_SrfRemoveAllKnots only in the
initial bounds of kept knots, so p3's removal body is shared
(remove_knots_kept). Shim, ffi wrapper, difftest runner and fixtures from
the upstream Surface/DropCurveSurface/offset_nurb test surfaces.
difftest: 2681 cases pass (0 deferred); p3 re-run 2518 pass.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8ohWGLCzFPoZriCeSSero