Better errors on coupon code failing

Assuming everything that wouldn't activate properly was "already
applied" doesn't work since anything that fails to activate but wasn't
"already applied" shows up to an end-user as "already applied". By
explicitly checking for coupons already applied we can put a more
generic error if activate fails.

Fixes #4781

Conflicts:
	core/app/models/spree/promotion_handler/coupon.rb