Make Settings class more flexible, less brittle

I hadn't touched this class for about 4 years, and this morning had to
add another setting to it in order to fix a bug (see commit
2861dc1a7e52). With a more flexible design, I could have left it
untouched.

This commit implements that design, teaching the settings class to
fully mediate between the caller who wants to save/restore some
settings, and Vim. It records the settings that are to be changed, makes
the changes, and can restore the settings by "replaying" the recorded
settings.

Signed-off-by: Wincent Colaiuta <win@wincent.com>