Extracted the DI loading of an array from the YamlFileLoader

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | sort of
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | none
| License       | MIT
| Doc PR        | n/a

This allows to reuse the logic easily for other loaders needing to extract data from an array.

Note that references and expressions are subject to the same syntax than in YAML files. the goal is to load arrays from a place where you might not be able to instantiate objects.

currently, only the YAMLFileLoader is using it, but the PlainArrayLoader (better named ArrayFileLoader btw) submitted in #11953 could reuse it as well. This would make it benefit from the safeguards added in #11374  as well.

I haven't added dedicated tests yet (but the code is executed by the YamlFileLoader tests). I can add some tests if there is an interest in merging this.
I can imagine 2 cases with objects in array config.

1. We use the same "modifiers" (`tags`, `lazy`, `scope`, etc.) as in YAML:
	```php
	// ...

	return [
		// ...

	    'services' => [
	        'foo' => [
	        	'definition' => new Definition(
	        		Foo::class, [
						new Reference('bar'),
		        		new Reference('baz')
		        	]
		       	),
		       	'tags' => ['tag1', 'tag2']
	        ]
	    ],
	];
	```
	And here we have
	* code duplication with `YamlFileLoader` here as well
	* possible inconsistent definition, e.g. I can write

		```php
		'foo' => [
			'definition' => (new Definition(...))->setTags(['tag1']),
			'tags' => ['tag2']
		]
		```
		
2. We use setters with quite ugly chaining:
	```php
	// ...

	return [
		// ...

	    'services' => [
	        'foo' => [
	        	'definition' => (new Definition(
	        		Foo::class, [
						new Reference('bar'),
		        		new Reference('baz')
		        	]
		       	))
		       	->setTags(['tag1', 'tag2'],
	        ]
	    ],
	];
	```
	And in this case I don't see real difference with pure PHP config.

IMHO, YAML's conventions are well-known and look nice. The only thing I dislike is expression language, I think there would be no sense to keep them in plain array config.