`ReleaseRoutingPlugin` called `Done` with the caller context. In the
loop-out payment flow this cleanup is deferred, so the context may already be
canceled by the time teardown runs.
That can prevent mission-control restoration in `Done`, leaving
plugin-induced routing state behind after a swap exits.
Fix this by detaching cancellation in `ReleaseRoutingPlugin` and passing
`context.WithoutCancel(ctx)` to `Done`, so teardown still executes during
caller cancellation.
Also add a regression test that cancels the caller context before release and
asserts the plugin `Done` call still receives a live context.