Adding several new coupon types

This pull request adds several coupon types, and clarifies the CouponInterface interface.