Adds campaign filtering

Fixes #11 

Adds filtering to campaign listings in individual digest messages. Filtering is based on:
- Remove campaigns that have a report back
- Remove campaigns that don't have a campaign image
- Remove entries that are not campaigns (invalid entries due to the migration from the old world to the new world)
- Only include regular campaigns, not SMS
- Remove inactive campaigns

- Sort by signup date, oldest first
- Limit the number of campaigns to 5 maximum
Ok, so you don't have to use this, but I was just wondering how all the sorting could be optimized a little more. I moved the `!isset($globalMergeVars[$campaign->nid])` check and the `is_staff_pick` check into the same for loop, so you're not looping through the array twice. I'm breaking out of the $campaignDetails loop so it doesn't keep going through items when a match has already been found. And for the sake of clarity and maintaining the sign up sorting, I keep two separate staff/non-staff pick arrays that are then sorted and combined later.

```
...
$staffPicks = array();
$nonStaffPicks = array();
foreach ($targetUserCampaigns as $targetUserCampaignCount => $targetUserCampaign) {

  // Skip any campaigns where the nid is invalid
  if (!isset($globalMergeVars[$targetUserCampaign->nid])) {
    continue;
  }

  foreach ($campaignDetails as $campaignDetailIndex => $campaignDetail) {

    // Check if the nid's match
    if (isset($targetUserCampaign->nid) &&
        isset($campaignDetail['drupal_nid']) && 
        $targetUserCampaign->nid == $campaignDetail['drupal_nid']) {

      // Check if it's a staff pick
      if (isset($campaignDetail['is_staff_pick']) && $campaignDetail['is_staff_pick'] == 'true') {
        // Add to the staff pick campaigns
        $staffPicks[] = $targetUserCampaign;
      }
      else {
        // Add to the non-staff pick campaigns
        $nonStaffPicks[] = $targetUserCampaign;
      }

      break;
    }

  }
}

// Sort staff picks by date
usort($staffPicks, function($a, $b) {
  return $a->signup - $b->signup;
});

// Sort non-staff picks by date
usort($nonStaffPicks, function($a, $b) {
  return $a->signup - $b->signup;
});

// Append the non-staff pick campaigns onto the end of the staff pick campaigns
$tmp = array();
array_push($tmp, $staffPicks);
array_push($tmp, $nonStaffPicks);

// Replace array with the cleaned and sorted one
$targetUserCampaigns = $tmp;
...
```