[POC][WIP] 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

 - [ ] support for attribute types
 - [x] use it in edit common attributes (merge https://github.com/akeneo/pim-community-dev/pull/1752 first)
 - [ ] update the product builder to centralize product value creation/update ?
 - [ ] 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?             |
| New feature?         |
| BC breaks?           |
| CI currently passes? |
| Tests pass?          |
| Scenarios pass?      |
| Checkstyle issues?*  |
| PMD issues?**        |
| Changelog updated?   |
| Fixed tickets        |
| DB schema updated?   |
| Migration script?    |
| Doc PR               |
Yep should be in constructor or instance variables (I prefer the second one).