Range should contain all variant products by parent's category

If a product range is defined as a list of included categories, there is a bug when testing if a product variant is included in the range. Variant product should not have categories and parent's categories should apply when testing if this product is in the range.

This adds a new wrapper method to get all categories that returns parent's categories for variant products. We use this new method in offers to check if product is in category.

This fixes a bug when processing offers, where previously variant products were not included in a range and so were not accounted for offer conditions.