Allow more compatibility with adding new gamemodes.

- Moves addGameType from EnumHelperClient to Enumhelper because it
exists on the server as well as the client.
- Adds an event for when the player capabilities are recalculated.
- Allows the gamemode and defaultgamemode to utilize new gamemodes
added.

Example mod using the new functionality:
```java
package abc;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;

@Mod(modid = "gamemodetest", name = "Gamemode Test")
public class ModGamemode {

    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
        EnumHelper.addGameType("SPECTATOR", 3, "spectator", false, false, true);
        EnumHelper.addGameType("CREATIVE_SPECTATOR", -10, "creativeSpectator", false, true, false);
        EnumHelper.addGameType("FLYING_SURVIVAL", 20, "survivalFlight", true, false, false);

        MinecraftForge.EVENT_BUS.register(this);
    }

    @SubscribeEvent
    public void onPlayerConfigurePlayerCapabilities(PlayerEvent.ConfigurePlayerCapabilities event)
    {
        switch (event.gamemode.getID())
        {
        case 3:
            event.capabilities.allowFlying = true;
            event.capabilities.isCreativeMode = false;
            event.capabilities.disableDamage = true;
            event.capabilities.allowEdit = false;
            break;
        case -10:
            event.capabilities.allowFlying = true;
            event.capabilities.isCreativeMode = true;
            event.capabilities.disableDamage = true;
            event.capabilities.allowEdit = false;
            break;
        case 20:
            event.capabilities.allowFlying = true;
            event.capabilities.isCreativeMode = false;
            event.capabilities.disableDamage = false;
            event.capabilities.allowEdit = true;
            event.capabilities.isFlying = false;
            break;
        }
    }

    @SubscribeEvent
    public void onPlayerInteract(PlayerInteractEvent event)
    {
        if (event.action == Action.LEFT_CLICK_BLOCK)
        {
            if (!event.entityPlayer.capabilities.allowEdit)
            {
                event.setCanceled(true);
            }
        }
    }

}
```