Add `shell` configuration to gitlab-runner custom executor `custom` step

Proposal

At work, we use a custom executor gitlab runner to create VMs in a kubevirt cluster. This works fairly similarly to the sample libvirt executor. The way it works is rather simple: Users are supposed to define their steps in their CI pipeline like so:

job:
  tag: kubevirt-runner
  env:
    KUBEVIRT_TEMPLATE: name-of-template-in-kubevirt-cluster

The runner will take care of downloading the template, creating a new VM based on it, and connect to ssh to run the scripts.

There is just a single problem: Different templates may need to use different shells. For instance, we may have windows templates using cmd, and linux templates using bash.

The current "solution" is to have multiple registered runners, one per shell, and have the user type out the correct one, e.g. specify kubevirt-runner-bash in the tag. But that's kind of confusing, and requires users knowing the shell each runner requires, which is often unnecessary. The custom executor could trivially infer the shell to use based on the template - all it needs is a way to dynamically configure the run step to generate scripts for the correct shell!

As such, I'd like to add a new field to the custom executor's config step, namely shell. If this field is present, it would cause the run step to generate scripts in the given shell, overriding the shell field from the runner's config.toml entry.

If the feature request is accepted, I think I can try to implement it.