Calculating campaign stats locally

This PR introduces methods on the campaign model that calculate campaign stats based on the Crowdhoster site's local data, as opposed to relying on the stats values returned by the API.  By removing the dependency, we provide more flexibility with campaign data.