Refactor 'main' app into 'distributed' and 'main' apps

This depends on #1646

As per the analysis in 
https://github.com/learningequality/ka-lite/wiki/Intended-app-dependencies

The `main` app has a lot of circular and strange dependencies because it contains at least three separable components:
* The topic tree and associated methods and data logging of user interactions with topic tree data
* The entire distributed server website

 In order to separate the distributed server website (which is only for the distributed server) from the data and topic tree components (which are shared with other apps), I've create a new `distributed` app (to mirror the `central` app), which represents the distributed server website.

I've also moved web caching logic to `fle_utils/webcache.py`, and that code can now be used generically across all apps (including `central`)

Testing:
* Did some basic stuff (like exercises), but overall just running the test suite (were it running) would be sufficient.  This is a pure refactor.