Iterate on job input / moa expression handling

With Introduce first iteration of job inputs interpo... (!5855 - merged) we've introduced a first iteration for parsing job inputs from the JobResponse and parsing them as moa template expressions to later evaluate them.

Currently, we use an approach based on struct tags to mark which fields allow input interpolation on the JobResponse, something like this:

type Step struct {
	Name         StepName   `json:"name"`
	Script       StepScript `json:"script" inputs:"expand"`
	Timeout      int        `json:"timeout"`
	When         StepWhen   `json:"when"`
	AllowFailure bool       `json:"allow_failure"`
}

This marks the Script field in a Step with inputs:"expand" meaning that we should expand inputs in that field.

The risk with this approach is that when using Script we need to make sure to expand.

We could avoid this by changing the type of the field to something like an Expression type that would need to be evaluated to access its contents (or explicitly not):

type Step struct {
	Name         StepName               `json:"name"`
	Script       Expression[StepScript] `json:"script"`
	Timeout      int                    `json:"timeout"`
	When         StepWhen               `json:"when"`
	AllowFailure bool                   `json:"allow_failure"`
}

This could be combined with struct tags or not. We haven't done this in the first iteration because it's a rather large refactoring that we are not sure will pay out.

The idea is to get a better grasp of the future work we need to do with job inputs and decide then if it'll be worth the effort.

There might also be alternative approach or additional improvements we could make.