Resolve trial days per plan from the user's experiment variant instead of
the static plan config, so reduced_trial gets the shorter trial and pay_now
is charged immediately (zero trial). Expose the offer descriptor on the
paywall so the frontend can show the trial/money-back terms.
Add the A/B/C experiment foundation: a Pennant feature that buckets users
who register on or after subscriptions.experiment.started_at evenly into
control / reduced_trial / pay_now via a stable hash, leaving earlier users
"legacy". The ExperimentOffer service turns a variant into the concrete
offer (trial days per plan, pay-now flag, refund window, self-refund
eligibility) for the checkout, paywall and billing screens to share.
While started_at is null the experiment is off and everyone behaves like
control, so this is inert until activated via env.