[#70969904] Limit preamble ERB scope


Rubocop highlighted that we are not really cleanly managing the available scope of our ERB interpolation -- we were relying on the 'vars' parameter being available in the immediate scope of the method, which is then available to the underlying ERB via the self.binding call.

This PR creates an OpenStruct object with a far cleaner scope (including our vars param, vapp_name, and the local ENV), plus expands out our ERB tests to confirm that the behaviour is equivalent before and after the scope reduction.

This fixes up the Rubocop warning in [#70437918] about 'unused argument' for 'var', albeit in a way that is a little more involved that would be expected, and hence has its own story.