Add cohort class hierarchy, refactor CohortService

This is step 3 of implementing cohorts whose memberships are entire
wiki projects.  Since we'll have different kinds of cohorts going
forward, this change makes a class hierarchy that expresses these
cohorts independent of how they are stored in the database.

This is also step 4 of implementing cohorts whose memberships are entire
wiki projects.  This will make use of the work in steps 1-3 to actually
make the metrics aware of project level cohorts.  The change aims to be
as disturbance-free as possible for metrics.  In other words, ideally
metrics are dumb and don't know about cohorts.

Naming:
FixedCohort  - cohorts with a fix number of members
WikiCohort   - cohorts that span a whole wiki project

Change-Id: I6b1cc6eeab69a6344326b6f12a99d5018ed05b8b