Merged Variant with Product bundle
Added Purchasable and Purchasableresolverinterface

A Purchasable is an object that:

 * Has a SKU (Stock Keeping Unit) code
 * Has stock attribute, reporting the purchasable availability.
 * Implements ProductPriceInterface, so that prices can be read and written

Using this consistent interface, services and classes that operate on
these features (such as CartManager) will have a shallow dependency
with product classes or interfaces

A purchasable resolver allows an object in the AbstracLine
class hierarchy to specify the concrete logic to recognize
the actual type of a purchasable and to act on the AbstractLine
accordingly.
Added test for Variant in CartManager
Normalized cascade attribute in yml mapping
Enforced policy on Variant::addOption

Variant::adOption can only be invoked if the Variant has been associated
with a parent Product. When this condition is not met, a LogicException
is thrown.
This helps keeping synchronized the options of a Variant with its parent
Product attributes.