(#18508) Specify the order of resources in the catalog

This adds a specification to the order in which resources appear in the
catalog. They must appear in the order in which they are added to the
catalog.

In order to make this kind of assertion easier this commit also brings
in Ramcrest.
(#18508) Preserve order of insertion for resources

The order that resources are added into the catalog is needed in order
to ensure a less surprising order when applying resources on the agent.
This ensures that the order that resources are transmitted to the agent
preserves that insertion order.
(Maint) Remove unneeded array code in type

Iteration across an array with only one element isn't needed. Just
flatten it out and make it simpler.
(Maint) Remove unnecessary alias in Component.new

From our understanding, any resource alias should already exist at this point.
(#18508) Preserve order while translating catalog

The catalog is translated in several different places into several
different forms. Each one of these transformations needs to preserve the
order of the resources that they contain.
(#18508) Assert kinds of resources sent to agent

This adds assertions that the virtual resources are not sent to the
agent, and neither are exported resources.
(Maint) Rename catalog integration spec

The catalog integration spec was originally intended as just to be about
the order in which some elements appeared in it, but it has evolved to
be about the general invariants and properties of the catalog as it is
transmitted between the master and the agent.
(Maint) Remove some unneeded complexity

The compiler held onto an attribute that it didn't need
(@exported_resources) and some of the failure checking used
constructions that were a little more complicated than needed.
Merge pull request #1805 from zaphod42/feature/master/18508-preserver-resource-ordering-from-manifest-to-application

(#18508) Preserve order of insertion for resources