bot: add IRCUser.reset_permissions()
config: add Config.threaded_save() method.
I should probably make it safer at some point though
plugins: use threaded_save to save config
plugins/commands: expose the command name in CommandContext
plugins/permission: Restructure plugin
Instead of permission commands directly mutating the plugin's configuration
dict, they now work on User and Group objects looked after by the plugin itself.
They are converted as required between the object representation and dicts of
config keys.
As a result, the '/' syntax for channel-specific permissions is now a detail of
the way permissions are serialized. The plugin understands them and treats them
separately, so they should be much less shaky now.