Use opaque keys

LMS-11462

@jimabramson @nasthagiri plz review
SlashSeparated is a particular type of Key family. Split does not use SlashSeparated; so, this code won't work with split. CourseKey knows how to generate SlashSeparated or CourseLocator depending on the syntax of the given string.