Ensure coupon codes for whole-order adjustments work correctly
Define PromotionHandler::Coupon#successful? to return boolean of success of application
Cache result of insufficient_stock_lines so that it is not called for every single line item rendered on the cart page
Pass through order in CreateItemAdjustments#create_adjustment call

This is so the order isn't reloaded every time adjustable.order is called, as before
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