Story map performance boost

* By caching a list of widgets which are currently visible,
StoryPanel.paint() doesn't need to iterate over every widget during each
paint call. This results in a decent performance increase.