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.

 - [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
 - [ ] technical doc
 - [ ] a command to list the setter / copier per attribute type
 - [ ] priority for setter/copier OR check only one for an attribute type

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?           | 
| CI currently passes? |
| Tests pass?          |
| Scenarios pass?      |
| Checkstyle issues?*  |
| PMD issues?**        |
| Changelog updated?   |
| Fixed tickets        |
| DB schema updated?   |
| Migration script?    |
| Doc PR               |
the copier impl will come with a second PR