(PUP-2906) Refactor collector into several classes
Prior to this commit, the parser created a Puppet::Parser::Collector
in order to collect resources. However, there were three distinct
code paths that needed to be dealt with: collection of virtual
resources, collection of exported resources, and realization of
a set of resources.
In order to make the code for collection more readable and manageable,
split up the current collector into three different collectors which
reflect the code paths described above.
Additionally, make some changes to the compiler so that it is compatible
with these new collectors while still supporting the old 3x collector.