Arbitrary Content importing from a directory structure

Resolves #2397 

Summary of changes:
* Converts khanload into contentload
* Adds capability for importing of content from different channels
* Allows global setting of channel through local settings (this could also implement dynamic settings to allow it to be on a per user basis)
* Trawls a directory structure to create a topic tree, reading directories as topics and looking up associated .json files for additional metadata.
* Generates unique ids based on channel name and file md5 checksum.
* Copies content to KA Lite content folder with id as file name + extension
* Creates a new channel specific topic tree, exercise cache, video cache, and content cache
* Fixes sidebar to show content at all levels of hierarchy

Just needs a test to check that the topic_tree generation is solid, but wanted to have it up for review @jamalex and @aronasorman .
String formatting ("%s" or `.format`) is clearer than string concatenation for me.