Promotions

A promotions API (and tests).