(PUP-2906) Reimplement virtual resource collection

Since collection currently relies on the 3x AST, it must be
reimplemented in such a way that it does not rely on the old parser.
That way, we won't break collection with the old parser is removed
for the 4x series.

Take the first steps towards doing this by reimplementing evaluation
for collections so that it no longer relies on
Puppet::Parser::AST::Collection or Puppet::Parser::AST::CollExpr.
Begin by supporting virtual resources with this new implementation.

Additionally, make a small change to resource/file/content.rb so
that it uses dup instead of clone. This is necessary to prevent
trying to modify a frozen String.