User badge recommendations, stage 2

Though we bias towards online badges, we will now also recommend offline
badges so long as they are active. A program is "active" if it's after
the start date, but before the end date (both inclusive).

This also takes into account a user age range so we don't recommend
age inappropriate badges.

**TODO**:
  * Be smarter about recommending badges that will complete a
    category level badge.
  * Be smarter about falling back when a filter reduces the
    recommendation set to zero items. For example, in the case
    where a user hasn't earned any badges yet, we are going to fall
    back completely to `allBadges`, but we should probably still
    filter out participation badges.