Add form extensions compiler pass and implementation in forms + Fix some CS + Fix functional tests

I think this is "complete".

### So what's new ?
- You now have an helper in ```BaseController``` to easily create forms ( like the symfony way ).
```php
$myForm = $this->createForm("your_form_name", "your_form_type", $data, $options);
```
- Smarty form plugin now handles multidimensionnal forms: You can have a form which has a child that is a form ( this is really usefull combined with form types ). To access thoses fields, just use it this way: ```fieldparent.field```. This is unlimited, you can have: ```level1.level2.level3.fieldparent.field```

- New parameter for form: type. This allows you to create your forms with a type direclty in the template. Example:
```smarty
{form name="product" type="standard_fields"}
```

- Thelia now support form types / extensions ! You have 3 new tags: ```thelia.form.type```, ```thelia.form.extension``` and ```thelia.form.type_extension``` that allows you to register everything you want in your forms 

- There is an empty form that allows you to create only types ( for symfony reusability ). Create your final type, then  just use it this way:
```php
$this->createForm(null, "your_type", $data, $options);
```
```smarty
{form type="your_type"}
```

- There is now 3 helpers for form collections:
    - ```form_collection``` That checks if the collection exists, loops and injects fields every row data. It has an optionnal parameter "row" that can take a symfony form (example: a collection into a collection). It outputs 3 variables: 
        - ```$row```: the collection
        - ```$collection_current```: The current loop index.
        - ```$collection_count```: The total count of collection entries
    - ```form_collection_field```: It has the same behavior has ```form_field```, but for collections. 
    - ```form_collection_count```: Counts the collection entries ( even before the ```form_collection``` call ). Warning: entries are used a stack, if you use this function AFTER the ```form_collection```  call, you will get 0 as result.
Usage:
```smarty
{form name="book-form"}
    {form_collection form=$form collection="books"}
       {form_collection_field form=$form row=$row field="author"}
           {$label} : <input type="text" name="{$name}" id="{$label_attr.for}" value="{$value}" />
       {/form_collection_field}
    {/form_collection}
{/form}
```

- Oh ... And now there is 2 events: ```TheliaEvents::FORM_BEFORE_BUILD``` and ```TheliaEvents::FORM_AFTER_BUILD``` That allows you to add / delete fields on the fly, or do what you want !