fix(teststat): [T079] ADF lag selection scores all candidates on one fixed sample (Ng-Perron 1995) (#178)

`adf_select_lags` rebuilt a DIFFERENT effective sample for every candidate lag p —
dropping p leading observations, so AIC/BIC/HQIC were computed on non-comparable samples
of size (n-1)-p. Comparing information criteria across different sample sizes is invalid;
the minimizer was biased (an AR(2) fixture selects lag 8 = max instead of the correct 1).
Ng & Perron (1995) require a single fixed estimation sample for every candidate.

Fix: score every candidate on ONE fixed sample of (n-1)-max_lags observations. Fix the
dependent rows Y = dy[max_lags+1 : n-1] once; for each p build the right-aligned ADF
design and keep only its last (n-1)-max_lags rows (drop the first max_lags-p rows). A
residual-df cap shrinks max_lags until the largest model keeps ≥1 df (replaces the old
per-p `nobs_eff<10` guard, which the fixed-sample rewrite removes), plus a single
`nobs_fixed<10 ⇒ 0` degenerate guard. The trend regressor's constant offset from
row-dropping is absorbed by the intercept, so SSE/ll are invariant — no rebuild needed.
`adf_test` is unchanged: the final ADF statistic is still computed on the selected lag's
natural sample (statsmodels `adfuller` convention); only the SELECTION is made comparable.

Test: "M-12 ADF fixed-sample lag selection (Ng-Perron 1995)" — analytic identity
(adf_select_lags == independent fixed-sample argmin for :aic and :bic), bug-exposure
(fixed-sample lag ≠ the old variable-sample argmin on the fixture), AR(1) sanity + bounds.
test_unitroot 197/197; coverage twin (only asserts 0≤lag≤max) still 398/398. No doc change
(adf_test/ADFResult unchanged). Ref: Ng & Perron (1995).
