Allow multiple types of 'ItemDiscountConstraint' for extensibility

Don't just allow ProductsDiscountConstraint and CategoriesDiscountConstraint to check if an item falls within the constraints of a discount.

Anything that extends ItemDiscountConstraint will now check if an item falls within constraint.
Merge branch 'issue/custom-item-constraints'