Adds more specific error messages to promotions.

When checking if a promotion is eligible, the rules can specify why they
are ineligible by populating `eligiblity_errors`. The first error is
then displayed to the customer instead of a generic message.
Add better error messages for item total rule.
Clean up promotion rule's eligibility errors.

Extract some duplicate code and make things a little prettier.
Add error messages for single use promo rule.
Add error messages for product promotion rule.
Add error message for logged in user promo rule.