`self.discount` property will fail, because it requires price with the tax.

Couple lines above:

```
     @property
     def discount(self):
         return self.get_discount()['discount']

     def get_discount(self):
        # Return a 'discount' dictionary in the same form as that used by the
         # OfferApplications class
         parent_charge = self.method.charge_incl_tax
         # ...
```

`is_discounted` should be refactored to

```
     @property
     def is_discounted(self):
         # We check to see if the discount is non-zero.  It is possible to have
         # zero shipping already in which case this the offer does not lead to
         # any further discount.
         return self.discount > 0
```