Improves promotion#products collection method

promotion#products should return products from all rules that respond to
a products method and not just from the built in PromotionRule::Product
class.

This should make it easier for developers to use their custom rules to
interact with Spree::Promotion

Fixes #2363