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 .
Seems like this only does validations for exercises, videos and topics. Can you add some simple validation for audio and pdf content as well? Maybe just checking if they exist in the file path.