[WIP] [DependencyInjection] added support for expressions in the service container

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #7352
| License       | MIT
| Doc PR        | not yet

This PR introduces a way to inject expression in the definition of a service.

Here is a small usage example:

```php
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Expression;

class Foo
{
    private $value;

    public function __construct($value)
    {
        $this->value = $value;
    }

    public function getBarValue()
    {
        return $this->value;
    }
}

class Bar
{
    public function getValue()
    {
        return 'bar';
    }
}

$c = new ContainerBuilder();
$c->register('bar', 'Bar');
$c->register('foo', 'Foo')->addArgument(new Expression('bar', 'value'));

echo $c->get('foo')->getBarValue()."\n";
```

Here is the XML version:

```xml
    <services>
        <service id="foo" class="Foo">
            <argument type="expression" id="bar" path="value" />
        </service>
        <service id="bar" class="Bar" />
    </services>
```

And the YAML version:

```yml
services:
    bar:
        class: Bar

    foo:
        class: Foo
        arguments: [@bar::value]
```
The `Expression` constructor takes a service id and a property path (as defined by the Symfony PropertyAccess component). Using the Symfony PropertyAccess component gives you a lot of flexibility in the way you get data from your objects.

Expressions are not limited to service arguments, you can use them everywhere (like in a method call, a configurator, ...).

Todo

 - [ ] update documentation
 - [ ] update all loaders and dumpers
 - [ ] add tests

Open questions:

 - Do we allow some cusomtization of the property access object (like support for __call?)