PIM-3260 : product update api

Propose a way to easily mass update products via an explicit API.

Refactor existing API to make it more SOLID and straightforward.

Doc in progress https://github.com/akeneo/pim-docs/pull/35

The Copier(s) impl will come with another PR.

Todo, 
 - [x] support for attribute types for setters (except media and identifier)
 - [x] use it in edit common attributes (merge https://github.com/akeneo/pim-community-dev/pull/1752 first)
 - [x] specs / behat

Later,
 - [ ] a command to list the setter / copier per attribute type
 - [ ] technical doc

Do we expect the validation inside the updater ? -> No, should be done in the caller
Do we expect the persistence inside the updater ? -> No, should be done in the caller

| Q                    | A
| -------------------- | ---
| Bug fix?             | N
| New feature?         | Y
| BC breaks?           | N
| CI currently passes? | Y
| Tests pass?          | Y
| Scenarios pass?      | Y
| Checkstyle issues?*  | N
| PMD issues?**        | N
| Changelog updated?   | Y
| Fixed tickets        | PIM-3356
| DB schema updated?   |
| Migration script?    |
| Doc PR               |
when add a custom attribute type, you may need it, not a big deal imho to inject from DI, we try to avoid static definition of attribute types we had issues by the past with projects