Badge.award_to option to raise BadgeAlreadyAwardedException when needed
Notify of badge award in save() method rather than just award_to()