Add support for courseware partitioning based on cohort.

@andy-armstrong @cahrens 

suspect i'm going to need to wire something into stevedore - @andy-armstrong ?

please take heed of the notes in the first commit message - there's a database migration needed. 
this is an important question and i don't feel like i have a totally solid answer.  one consideration at the moment is that in order for the example you've given to work, in theory, the admin would need to create cohorts that defined all the intersections of these two partitions:

1. easy microsofters
2. easy googlers 
3. hard microsofters
4. hard googlers

Then they would need to map cohorts 1+2 and 3+4 to "easy" and "hard" partitions respectively,  and then 1+3 and 2+4 to "microsoft" and "google" partitions. 

I can see how this could be useful, but it seems like a tricky and laborious way to support intersecting groups.  Cohorts are defined as strictly disjoint sets so you can't get intersections from them naturally.  Seems like the better way to do it would be to expose more ways to group students in the LMS, e.g. tagging or something like that.

@explorerleslie any thoughts here?