Preparatory work for supporting additional sites

In order to support more sites, the concept of a story id needs to
change from a simple number, and that's a good chance to encapsulate a
lot of related but widely distributed logic in one single class.

The StoryOverview has changed to a new model where it is always
present, but updates its values at times. This makes a lot more sense
than anything else, especially since it needs to save things like
chapter URLs (which are not as easily calculatable on AO3 as they are
on FF.net). Next up are the StoryChapters.