Initial draft of forge/FML support. Some race conditions prevent this from working sometimes. Something with the time we send the handshakes
Forge 1.7 support. See issue #899.

Conflicts:
	protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java
	protocol/src/main/java/net/md_5/bungee/protocol/packet/EncryptionRequest.java
	protocol/src/main/java/net/md_5/bungee/protocol/packet/EncryptionResponse.java
	protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java
	proxy/src/main/java/net/md_5/bungee/ServerConnector.java
	proxy/src/main/java/net/md_5/bungee/UserConnection.java
	proxy/src/main/java/net/md_5/bungee/conf/Configuration.java

Conflicts:
	proxy/src/main/java/net/md_5/bungee/ServerConnector.java
Move registering the Forge FML/FML|HS channels to the Bungee methods, in an attempt to try to fix other channels not working.
Comments to clarify what the two state classes handle.
Fix situation where Forge clients couldn't log onto Spigot servers.

Conflicts:
	proxy/src/main/java/net/md_5/bungee/ServerConnector.java
Commented out a line so switching between Spigot servers works - to be uncommented once re-sending a handshake is working.
Quick fix to some blocks sometimes not rendering on the Forge client when connecting Spigot.

Please note that you now need to mark a server as modded using the "modded: true" option in your config.yml
Insert a delegate-like packet sender into the client, that slows the Forge server handshake so the client can complete modded negotiation first.
Fix on initial connection when connecting to a vanilla server. Should fix some of the low latency (!) problems that users have seen. Part of issue #899.

We now do the client handshake before we start our server connection in this case. We allow it to finish through the use of an IVoidAction interface that acts as a delegate, passing back control to the main connection routines when the handshake is done.

When we come around to server switching (once FML has the ability to switch states), we need to consider that a server might reject the client after the handshake is complete. We might need to do a second handshake much later in this case, otherwise the user might end up with an incorrect state for the server they are currently connected to.
Fixing broken code that prevents clients from logging into modded servers.
Logging upstream/client side FML handshake, and reworked the client state class to fall into line with the FML server sequence manager.
Refactored Forge support to fix syncing issues.

* ForgeClientHandshakeState and ForgeServerHandshakeState now represent
FML's exact flow so we can manage everything better.

* Instead of calling startHandshake explicitly, we simply allow FML to
start the handshake for us after receiving the LoginSuccess packet as
shown here :

https://github.com/MinecraftForge/FML/blob/master/patches/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java.patch#L26

This solves the syncing issues since we are not attempting to change the
normal flow.

* Changed resetHandshake method to call a new FML packet HandshakeReset.
After FML completes its handshake on clientside, it ends up in the DONE state.
Previously it would do nothing and prevent Bungee from reinitializing its ID's. Pending a PR, FML will listen for this HandshakeReset packet and revert back to the START state as well as revert its GameData to the main menu state.
This fixes the ID syncing issue we had previously when switching servers.

* Removed need for syncing vanilla block ID's to FML when a forge client
connects to vanilla server. FML handles this by aborting the handshake
process and skipping to the DONE state when detecting a vanilla server as
shown here :

https://github.com/MinecraftForge/FML/blob/master/src/main/java/cpw/mods/fml/common/network/handshake/FMLHandshakeClientState.java#L44

* Removed isModded flag. Detection of a forge server is now handled after
receiving the first FML packet from server.

* Fixed pom.xml for eclipse users.

Note: This commit still REQUIRES FML client changes which have not been
sent to FML. I will be sending the required PR to get support in for
BungeeCord within the next day or so.

Conflicts:
	proxy/src/main/java/net/md_5/bungee/ServerConnector.java
Remove the "enable_forge_support" flag, as the server is no longer sending FML|HS packets actively.

Conflicts:
	proxy/src/main/java/net/md_5/bungee/conf/Configuration.java
Fixed handshake issues when switching servers.
Fixed communication between ForgeServer and ForgeClientData.

* All packets sent within a state are now queued and sent synchronized after state transitions.
* Added support for Forge's channel registration.
* Added ForgeUtils which currently reads REGISTER packet for channels.
* Added better detection for Forge servers.
* Fixed logging.
Added support for FML's extended packets.
Remove unneeded VanillaClientData class.
Refactoring and cleanup to try to encapsulate as much of the Forge specific logic as possible inside the Forge packages. This should not change any existing behaviour - but will hopefully lead to higher maintainability.

Proxy package changes:

* Removal of the VanillaForgeServer class, and associated interface (only one object would implement the interface now, making maintenance slightly harder).

* Removal of the IForgeClientData interface (same reason as above).

* Renaming the ForgeClientData and ForgeServer classes to ForgeClientHandler and ForgeServerHandler, for consistency.

* Move the Client Forge state back into the ForgeClientHandler, as this object now exists for the lifetime of the user connection, rather than being switched in/out as before.

* Put a stricter access level on the ForgeClientHandshakeState, and exposed public methods on the Client Handler to perform the previous actions.

* Mark Forge classes packet queues as final, as the objects are never recreated and synchronized access should ideally be done over final fields.

* Made the ForgeServerHandler.isForge() reference a backing field explicitly, and added a setServerAsForgeServer() method to flip this from the default of false to true.

Protocol package changes:

* Update to the DefinedPacket in the Protocol library to match the max payload of Forge.

A note on the DefinedPacket. Ultimately, it would be better if we can encapsulate that within a Forge package, and return this class as much as possible to previous behaviour.
Add a mechanism for rejecting old Forge clients.

We check the mod list that the client sends for the FML version it is running, specifically, the build number, via a Regular Expression. If the FML build number is 0 (which usually indicates a testing build) or above the min build required (currently set to 1209, but will be updated when the FML reset patch is pulled), the connection proceeds as normal. Otherwise any connection to a Forge server will be rejected, as switching servers would otherwise crash the client.

This will disconnect users connecting to the default server, and sending a message to users who try to switch in game. We are looking to see if there is a good way to make users connecting to the first/default server connect to the fallback server instead.
Added method to retreive entire modlist from FML's ModList packet.

* Added cpw's ByteBufUtils class.