Alter how absolute discounts are applied

This change applies the discount to all matching lines in the benefit
range, weighting the discount by the line prices.  The old way was to
iterate over each line and try and apply all the discount.

This new way means that applying an absolute benefit consumes more
products from the basket than the old way, which may possibly have some
confusing side-effects.

This change avoids an issue where customers can get a free product if
they return most of the ordered products apart from the one that was
discounted to zero.
Merge pull request #595 from tangentlabs/issue/595/offer-discounts

Alter how absolute discounts are applied