Add base support for cohorted group configurations

TNL-649

Introduced a new scheme field to user partitions that controls how a user gets assigned
to one of the partitions groups. The default scheme is random, but the next step will be
to introduce a new scheme that will assign the user based upon the cohort they belong to.
@cpennington @jimabramson I like this concept, but I started trying to make this change and I'm unclear how to achieve it. The persistence logic uses a bunch of private variables on the PartitionsService:
 - _user_tags_service
 - _track_function
 - _key_for_partition

Does it make sense for the schemes to have access to the partition service so that they can access these same methods? That doesn't seem very clean and it assumes that the PartitionService has all the things that a scheme might need. If not, how can a scheme in a (potentially) different repo get access to the things it needs to implement persistence?

Can I leave this as is for now and we'll refactor it later when we have a clearer idea of how we want these schemes to be implemented?