Convert old node_cache to new

Could be targeted to develop, if this is deemed too severe a change.  Targeting to 0.11, as this will simplify how data caching (e.g. what videos are on disk) changes are done, which is required for 0.11.

This change should generalize NODE_CACHE sufficiently such that it will work for any topic structure.

Previously, TOPICS contained the entire topic tree (including some duplicate leaves (Videos, Exercises) at different paths, while NODE_CACHE only kept a single copy of each Video / Exercise.  However, NODE_CACHE is necessary for fast hashed access to particular slugs.

The goal of the current design is for both TOPICS and NODE_CACHE to contain all nodes, and for the tree to be traversed up or down independent of which structure the node is accessed through.  This is accomplished by:
* Storing an array of nodes at each slug location in the NODE_CACHE
* Dynamically setting the "parent" (immediate parent) and "parents" (all ancestor nodes directly in a node's path) on each node

This change will actually simplify things even further (TOPICS can essentially be eliminated, as the root can be accessed as "just another node" in the NODE_CACHE, if ever needed).  This could be done in the future; no need during this PR

Testing:
Just test that things haven't changed.  Reviewing the code, all of the following were touched, but should remain the same:
* `./manage.py cache show / clear`
* `./manage.py khanload` (broken, but by a KA API change, not by me!)
* Coach reports (especially tabular view)
* Knowledge map
* Exercise page

I tested all of the above, and things look good.

@dylanjbarth Please take a look and chat with me if you have questions--this change is directly in-line with Phase 2-type thinking.

@jamalex / @rtibbles I feel pretty confident with the design here, so no need for either of you to be on this one, but if you want to chime in re: design, as always would appreciate your thoughts!

Once this is in, I'll work on the final touches for data / webpage caching for 0.11, and @dylanjbarth should be all set for his Phase 2 work!