Fixed Variant::setOption behavior

When setting a Collection of options to a `Variant`, each Option should be
added separately using the `Variant::addOption()` method, which will also
update the parent Product `Attribute` collection.

`Product::removeAttribute()` method was also added
Would be nice to always do the `clear()`, so we can easily remove the else.
It is nothing about KISS. This block will be difficult to understand, even using ArrayCollection, so the explained block will have to be as well. The point is that we are working always with Interfaces, and ArrayCollection is an implementation, and any entity should know about any implementation.

This PR is ready to be merged. Requesting both :+1: after merging.