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.

Closes #5165