Remove the event/index stuff

It doesn't work when a hook is called inside another hook, and it's not
really necessary anyway. The error/stack trace tells us which hook it is
and the index.
Try and handle missing the default skin

This error report has been coming in for ages. There must be some hybrid
mod with my code that's missing the default skin file.
Catch errors for team switching

When Spectator:OnProcessMove calls this it sometimes passes one of the
annoying player objects that can't switch teams properly.
Don't spam requests if the button is held
Better binding handling
Better map vote notifications

- No more double notification on map end, it will just start the vote
without saying "waiting on map vote".
- Time left notifications now round down to the nearest 30 seconds.
- The winner message no longer says the map name twice.
This is never used elsewhere in the file

So no need for it to be a local function.
More unnecessary local functions
Replace assert with Shine.Assert

wherever we were using concat.
Bring this in line with the game's value
Fix oversight

We do want it as a local as it's used lower down too...
Change to UTF8Sub/UTF8 lengths

To match NS2's limits.
Use UTF8Sub for string argument limits
We can use self here instead of the global
Merge pull request #385 from Person8880/develop

More minor fixes/improvements