Previously, in 1fff951639, we added outputs
to the generated templates of various nested stack resources that
referenced any attributes required to calculate the parent resource's
attributes. That was necessary because attribute values are not cached
unless they are referenced somewhere. It isn't necessary for reference IDs
(i.e. the results of get_resource) because those are always available.
However, providing reference IDs as outputs as well will allow us to get
all attributes of the parent resource from outputs of the nested stack.
Unlike ResourceGroup/Chain, in InstanceGroup and AutoscalingGroup the order
and content of the member in list-type outputs cannot be determined at
template generation time (failed resources are excluded, and the sort order
depends on creation time). Therefore, always use dicts instead of lists as
outputs, both for the new reference ID outputs in AutoscalingGroup and
existing attribute outputs. For ResourceGroup/Chain, create both dicts and
lists as appropriate, so that each attribute value can be obtained directly
from an output.