Further plugin creation improvements

Commands can be bound to the plugin, no need to make the commands table
directly. Also, the default cleanup will remove these commands on plugin
disable, and can be called in a custom cleanup with
self.BaseClass.Cleanup( self ).
Cleanup stuff

Just some minor things really.
KDR based randomising

For those KDR lovers out there. Also fixed the AFK plugin storing
initial data about immune players.
Redirect method for reserved slots

If a player joins a reserved slot, they are redirected to another
server.
Immunity and logging for new reserved slots mode

Make sure we don't redirect those with access to sh_reservedslot!
Validate user data JSON, halt loading on invalid

Also fixed a bug in the ready room plugin preventing it from assigning a
team to a player.
Slightly safer JSON reading

Close the file handle before we do anything to the read data.
Disconnect reasons

Generic leave messages will show reasons for disconnect from Shine.
Merge pull request #124 from Person8880/develop

Plenty of stuff