Start of 1.7 Protocol

Implemented the serialization/parsing machinery needed to serialize/parse most of the 1.7 protocol.  Several data types used for relatively few packets (slot, metadata, etc.) are unimplemented.

Many packet definitions need to be filled in.
Variant Documentation

Documented the Variant template.
Remove Metadata

Metadata is now handled through a Variant, therefore metadata.hpp, metadata.cpp, and all the specialized machinery therein have been superseded.
Compression Fix

Fixed a bug which caused Inflate to enter an infinite loop on garbage input.
NBT Overhaul

Complete rewrote the NBT parser/serializer to use the new Variant template.  The interface is much nicer, cleaner, and more feature-complete than previously (notably debug stringification of NBT structures has been added).
Packets

Added new packet definitions, and serialization/deserialization for Metadata, and the weird conditional parse in Spawn Object.
JSON

Added an Add convenience method to the JSON::Object class.
NBT

Added a convenience method for creating/adding to a TAG_Compound.

Added back the TagType enumeration for use with the List object.  May have this deduced at some point in the future.

Documented all methods/classes/et cetera.
Compression Fix

Fixed a bug in the Deflate method which was causing exceptions to be thrown even on a successful compression.
Packets - NBT and Slot

Added serialization/deserialization support for GZipped NBT data and Slot data.
No Static Linking

No longer linking statically against libgcc and libstdc++.
GCC 4.8.1

Moved to compiling the server with GCC 4.8.1 on Windows.

Accordingly I can now take advantage of the [[noreturn]] standard C++ attribute rather than the GCC-specific __attribute__((noreturn)).

I was hoping GCC 4.8.1 would fix the bug preventing me from deducing the minimum necessary alignment for Variant's internal byte buffer (GCC rejects the constexpr value in the template as not being a constant for the purposes of alignas) but apparently that fix isn't in 4.8.1.  Maybe 4.9.
Packet Serialization Performance Improvement

Removed an unnecessary heap operation in some cases by using only one buffer to build a packet, rather than two (bytes are now moved back and the length header is inserted before them, rather than all serialized bytes being copied into a new buffer behind the length header).
Packet Documentation

Documented packet-related classes/typedefs/functions.
Serialize Fix

Removed SFINAE constraint on Serialize's parameter.  This check caused incorrect behaviour, as there's at least one packet in the protocol (as of now) with no body.
Packet Validity Detection

Added a compile time, template-based solution which allows a packet direction/state/ID combination to be determined to be valid (part of the protocol) or invalid (not).
Strict Aliasing

Fixed a couple of places where strict aliasing was broken.
Remove Historical Implementation Artifact

In a past conception of the packet parsing/serialization system, the PacketImpl::PacketContainer class had subclasses.  This is no longer the case, but PacketImpl::PacketContainer's members were marked protected -- rather than private -- anyway.
Signed VarInts

Mojang's signed VarInts are represented using the unsigned encoding of their bitwise representation, rather than zig-zag encoding (as I had originally thought).

Updated VarInt serialization/deserialization accordingly.
ObjectData

Added a typedef for ObjectData.