[Form] Implemented attributes for choices

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | 
| License       | MIT
| Doc PR        | 

## Use cases

Add attributes to choices like it's possible with any other element for example to add microdata attributes to use in select2 templates or disable choices.

## Usage

There are a few ways to apply attributes to choices:

### By specifying the choices_attr option

Note: It works only when using `choices`. See below for when using `choice_list`.

#### As an array

```php
$builder->add('choice', 'choice', null, array(
    'choices' => array('a' => 'A', 'b' => 'B', 'c' => 'C'),
    'choices_attr' => array(
        'a' => array('disabled' => true, 'data-foo' => 'bar'),
        'c' => array('disabled' => true, 'data-foo' => 'bar'),
    ),
));
```

#### As a callable

```php
$builder->add('choice', 'choice', null, array(
    'choices' => array('a' => 'A', 'b' => 'B', 'c' => 'C'),
    'choices_attr' => function ($choice) {
        $attributes = array();

        if ('A' === $choice || 'C' === $choice) {
            $attributes['disabled'] = true;
            $attributes['data-foo'] = 'bar';
        }

        return $attributes;    
    }
));
```

### By passing the attributes to the choice lists

```php
$builder->add('choice', 'choice', null, array(
    'choice_list' => new SimpleChoiceList(
        array('a' => 'A', 'b' => 'B', 'c' => 'C'), array(), array(
            'a' => array('disabled' => true, 'data-foo' => 'bar'),
            'c' => array('disabled' => true, 'data-bar' => 'baz'),
        )
    )
);
```

Edit : It is related to the following issues

https://github.com/symfony/symfony/pull/7510
https://github.com/symfony/symfony/pull/9694
https://github.com/symfony/symfony/issues/3836