"Do not play if preferences unavailable"

Adds a new option to how the game handles a situation where a player doesn't qualify for any jobs they have set. Previously you could only have it set to play a random job (risky and potentially unfun) or play assistant (greytide).

Players that use this but fail to qualify for anything they want get sent in as an observer in the same way they would if they had just hit observe. Because of how the game handles antag selection a player who is disqualified in this way is available for antagonist roles that choose before job handling (malf/nuke ops/wizard), but not for ones that choose after (everything else). Going forward with a little work monkey/blob (the other two "the job doesn't really matter" modes) antags could be added to the other list if so desired.

I feel that this would almost completely remove all the roundstart suicides/greytide by providing a "way out" for people who would otherwise get shunted into roles where they would have no desire to play the game and/or just be an asshole. It would also keep crew sizes down on hyper bloated servers.

I know the freeze is still on, but I'm posting it now due to how it may synergize/antagonize with #4306 . Obviously neither should be merged until the freeze is over either way.
Change instances of

```
if(magic == 1)
else if(magic == 2)
else if(magic == 3)
```

to

```
#define SORCERY 1
#define NECROMANCY 2
#define PYROMANCY 3

if(magic == SORCERY)
else if(magic == NECROMANCY)
else if(magic == PYROMANCY)
```