message: Add a fast path for saturated parameters
  Summary: Takes the len benchmark down from 5.27s to 4s. This entire code path needs a serious optimisation path, but nice to have a quick win on some of it.
diff: @@ -285,6 +285,19 @@ impl<'v> ParametersSpec<Value<'v>> {
  ) -> anyhow::Result<LocalSlotBase> {
  let len = spec.0.kinds.len();
  let slots = eval.local_variables.reserve(cmp::max(slots, len));
  +
  + if len == params.pos.len()
  + && len == spec.0.positional
  + && params.named.is_empty()
  + && params.args.is_none()
  + && params.kwargs.is_none()
  + {
  + // fast path for saturated length only positional
  + for (i, x) in params.pos.iter().enumerate() {
  + eval.local_variables.get_slot_at(slots, i).set_direct(*x)
  + }
  + Ok(slots)
  + } else {
  let mut collect = ParametersCollect {
  params: spec,
  slots,
  @@ -298,6 +311,7 @@ impl<'v> ParametersSpec<Value<'v>> {
  collect.done(eval)
  }
  }
  +}
  impl ParametersSpec<FrozenValue> {
  pub(crate) fn promote<'v>(&self) -> &ParametersSpec<Value<'v>> {
  