holoirc: multiple updates

* start using a cache for the events
* only update AppPreferences when prefs actually changes
* clear the caches when the prefs change