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 .
I think probably better to just check the related_content fields when that is implemented in this validation. The current validation doesn't check for the existence of files, because the import mechanism may be only API based (as with Khan Academy), rather than having all the files locally to hand.

What we could do is embellish the validate_data function within the import_channel module, to do file checking, but otherwise just check for the integrity of related content mappings.