Reworked a lot of the GUI system to be way more multiplayer-friendly

 * Moved GUI handling server-side using IGuiHandler and Containers
 * Any value updates get sent to any client with that tile's GUI open (meaning you can see changes other players make in real-time)
 * The correct values are sent from the server to the client whenever a GUI is opened
 * Packets sent from a GUI to the server no longer need to send the tile information, as we can now get the player's openContainer