(PUP-2240) Refactor unfold behavior into common method

A private evaluator method called unfold is added to handle
the case of iterating and evaluating an array of expressions where
an UnfoldExpressionExpressions should be unfolded/expanded in-line.

This new method is then used in the places where unfold behavior
is supported.