Cache 1033476

* [x] Add caching of topics too.
* [ ] Make the loading bar disappear at the correct time. Currently it disappears early.

This adds an option for updating the cache if the user doesn't have many documents cached already.

* Many is defined as 5 or less. 
Additionally, you should write this like:

```javascript
var productSlug = $rootScope.settings.product.slug;
KStorage.fuzzySearchObjects('topic:')
.then(function(topics) {
  return Promise.all(topics.map(cacheTopic));
})
.then(function() {
  var finishMsg = gettext("Documents finished downloading.");
  $rootScope.loading = false;
  $rootScope.$emit('flash', finishMsg);
});
```

Here is how this goes: `KStorage.fuzzySearchObjects` returns a promise for a list of topics. After that resolves, the first `.then` runs. It returns a `Promise.all` of a `.map` over those topics. The `.map` calls `cacheTopic` for each topic, which returns a Promise. So `topics.map(cacheTopic)` will return a list of Promises. `Promise.all` takes a list of Promises, and returns a new Promise that waits on all of them.