Configuration refactoring

Configuration refactoring

- More annotations to allow full configuration through annotations
- Allow also full configuration through PHP config
- Allow also full configuration through YAML config?

Future usage:

```php
$configuration = $container->getConfiguration();
$configuration->useReflection(true);
$configuration->useAnnotations(true);
$configuration->addDefinitions('config/di.yml');
$configuration->addDefinitions('config/di.php');
$configuration->setCache(new Doctrine\Common\Cache\ArrayCache(), $degug);
```

PHP array definition in `di.php`:

```php
return [
    
    'db.host' => 'localhost',
    'db.port' => 5000,
    
    'My\Interface' => [
        // This is an alias
        'class' => 'My\Implementation',
        'lazy'  => true,
        'scope' => Scope::SINGLETON(),
    ],
    
    'My\OtherClass' => [
        'constructor' => [
            'host' => 'db.host',
            'port' => 'db.port',
        ],
        'methods' => [
            'setFoo1' => My\Foo1::class, // PHP 5.5
            'setFoo2' => [
                'foo2' => 'My\Foo2',
            ],
            'setFoo3' => [
                'foo3' => [
                    'name' => 'My\Foo2',
                    'lazy' => true,
                ],
            ],
            'setFoo4' => ['My\Foo2', 'My\Foo4bis'],
        ],
        'properties' => [
            'bar' => 'My\Bar',
            'baz' => [
                'name' => 'My\Baz',
                'lazy' => true,
            ],
        ],
    ],
        
    'myNamedInstance' => [
        'function' => function(Container $c) {
            return new MyClass($c['db.host']);
        },
    ],
    
];
```

YAML definitions:

```yaml
db.host: localhost
db.port: 5000
 
My\Interface:
  # This is an alias
  class: My\Implementation
  lazy: true
  scope: singleton
 
My\Implementation:
  constructor:
    host: db.host
    port: db.port
  methods:
    setFoo1: My\Foo1
    setFoo2:
      foo2: My\Foo2
    setFoo3:
      foo3:
        name: My\Foo3
        lazy: true
    setFoo4: [My\Foo4, My\Foo4bis]
  properties:
    bar: My\Bar
    baz:
      name: My\Baz
      lazy: true
 
myNamedInstance:
  class: MyClass
```

Annotations:

```php
/**
 * @Component(lazy=true, scope="prototype")
 * or
 * @Injectable(lazy=true, scope="prototype")
 * or
 * @Scope("prototype")
 * @Lazy(true)
 */
class MyClass {
    /**
     * @Inject(lazy=true)
     * @var Property
     */
    private $property;

    /**
     * @param Class1 $param1
     * @param string  $param2
     * @Inject
     * @InjectParam("param1", name="Class1")
     * @InjectParam("param2", name="db.host")
     */
    public function __construct(Class1 $param1, $param2) {
    }

    /**
     * @param Class1 $param1
     * @param string  $param2
     * @Inject({
     *     @Param("param1", name="Class1"),
     *     @Param("param2", type="db.host"),
     * })
     */
    public function method(Class1 $param1, $param2) {
    }
}
```