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. 
The issue is that this is a class method that is used essentially as a singleton, so the scheme has no state to speak of. It is up to the caller (in this case, the partition service) to pass in the desired partition. In this case the partition isn't needed (due to the assumption that there is only one that we may relax). However, for the random scheme there is no information available so the partition must be passed in.