Apply coupon codes using API endpoint

When someone enters a coupon code, we should not be clearing out their payment data. This is really inconvinient for them. They got that all right and then stuffed up the coupon code. So instead we now apply it in the background. If the application is successful then we go through as normal. If it's unsuccessful, they're told as such and given an opportunity to try a new coupon code if they wish, or carry on without one