Add a BlockTypeKey class to capture block types and block families.

It isn't used by the .block_type attribute of other Key types, because
those types are already unambiguous. However, it will be used as the
block_type field passed as part of ScopeIds to XBlocks and XBlockAsides.
Minor cleanup of DefinitionLocator
Add course_key and map_into_course to AsideUsageKey
Make AsideUsageKey and AsideDefinitionKey support .replace