Reintroduce Config persistence

Before this patch, the guts of config persistence spilled all over the Configuration class.  A lot of file system interaction was mixed in with the body of the logic. Tests had to stub the file system to use the Configuration class.

This patch isolates some file system interaction in the Configuration::Persistence class.  This simplifies a few bits of code, removes stubbing from many tests, and gives other tests a cleaner layer for stubbing.

Having a Configuration::Persistence class is an old idea, that I removed months ago.  But in retrospect, as long as config is stored in the file system, it's a good idea and should stay.