Moved AbstractPurchasableFactory to Currency

AbstractPurchasableFactory represents an abstract factory service which
by default is injected with CurrencyWrapper, so that concrete Entity
factories that depend on a valid and consistent Currency can use it to
create new Entities in a stable state (like Product or Variant).

All entities factories whose returned Entity needs a valid Currency object
to be properly initialized should extend AbstractPurchasableFactory.
This is the reason why it has been moved to the Currency component.

CouponFactory has been moved to the AbstractPurchasableFactory hierarchy