A large number of config related edits

- The groups system has been refactored to allow easier softcoding. More on this below.
- All config.js entries are now camelCased to be consistent with the variable naming style used in the rest of the codebase.
- All the new permissions have documentation added (and no longer existent permission documentation removed)
- `crashguard` removed from config.js .
- modchat and login server configuration structure has been modified.
- Proper quoting styling has been fixed for both commands.js and config.js (" for text intended to be read by humans, ' for others)

The specialised functions in users.js: `checkPromotePermission()` and `getNextGroupSymbol()` have now been removed since they now can be implemented in a few lines in the few places that use them.
`can()` has been modified into two versions: A "static" one that accepts a fixed parameter order and type with only group symbols; and one that is part of the `Users` object which uses the current user and accepts multiple types and optional arguments.
A new function `getGroupsThatCan()` that returns the groups in a particular room that has the permission in ascending rank order, used in many cases where a group that has a permission is needed. This used to be done with hardcoding, but now can be softcoded.
The `isStaff` property of user objects has now been removed in favour for a `staff` permission, which allows individual room checking for staff ranking. As a side effect of this, room modlogs being checked by room auth that aren't global auth are now possible.
On the more config side of the group changes, which groups are global, chat room and battle room-only are now easily configurable, including which groups are the default groups for those. This allows more generalisation and simplification in the promoting/demoting logic among other things.
Fix crash in rooms.js
Merge remote-tracking branch 'upstream/master' into config-refactor

Conflicts:
	commands.js
	config/commands.js
	config/config-example.js
	users.js
Add support for setting modchat by group id
Merge remote-tracking branch 'upstream/master' into config-refactor

Conflicts:
	app.js
	commands.js
	config/commands.js
	crashlogger.js
Merge remote-tracking branch 'upstream/master' into config-refactor

Conflicts:
	battle-engine.js
	command-parser.js
	commands.js
	config/commands.js
Merge remote-tracking branch 'upstream/master' into config-refactor

Conflicts:
	commands.js
	config/commands.js
	rooms.js
	users.js
Fix pair of quotes in /hotpatch
Merge commit '07afacbb4d90e9c89b254fee360e8340a7676cc0' into config-refactor

Conflicts:
	commands.js
	config/commands.js
Merge remote-tracking branch 'upstream/master' into config-refactor

Conflicts:
	config/commands.js
Merge remote-tracking branch 'upstream/master' into config-refactor

Conflicts:
	commands.js
	rooms.js
	users.js
Fix permissions bug
Merge remote-tracking branch 'upstream/master' into config-refactor

Conflicts:
	commands.js
	rooms.js
Fix bug with permissions
Merge commit 'b262316d57030f1baf762d2ba79f8f72ddeefb48' into config-refactor

Conflicts:
	rooms.js
	simulator.js
	sockets.js
Merge commit '75559362b4b8af3885734d481b0b080dcf71d054' into config-refactor

Conflicts:
	app.js
	battle-engine.js
	command-parser.js
	commands.js
	config/commands.js
	crashlogger.js
	loginserver.js
	rooms.js
	simulator.js
	sockets.js
	team-validator.js
	users.js
	verifier.js
Merge remote-tracking branch 'upstream/master' into config-refactor
Fix demoting offline users
camelCase isTournamentsRated
Fix /promote and /demote checking room auth instead of global auth