Settings cache leads to unexpected behavior
If you've enable the dogpile setting cache and have an event listener on `model.setting.save.after`, the event will get the old value of the setting, not the new value.

Specifically, if you configure the cache via the ini file like:
```
[cache]
enabled: True
cache.global.backend = "dogpile.cache.memory"
```
and, in some code, bind to the settings change:
```
events.bind('model.setting.save.after', 'cool.plugin', onSettingChange)
```
Then in the function `onSettingChange`, `Setting().get(<setting name>)`, will get the old value.  The event has the new value.

Within the setting model, this could be prevented by invalidating the cache before the save (e.g., change:
```
        setting = self.save(setting)
        self._get.set(setting, self, key)
```
to:
```
        self._get.invalidate(self, key)
        setting = self.save(setting)
        self._get.set(setting, self, key)
```
though there will still be race conditions if multiple threads are changing the setting concurrently.
diff --git a/girder/models/setting.py b/girder/models/setting.py
index dadfc0539..4987d58db 100644
--- a/girder/models/setting.py
+++ b/girder/models/setting.py
@@ -118,6 +118,10 @@ class Setting(Model):
         else:
             setting['value'] = value
 
+        # Invalidate the cache so that events that listen for a change in the
+        # setting will be get the right value from a get.  We don't set it here
+        # as it could fail to validate and save.
+        self._get.invalidate(self, key)
         setting = self.save(setting)
 
         self._get.set(setting, self, key)
['girder/models/setting.py']