1.6.2 Support and World Gen

Changed over to the JSON chat system since it was fixed (it's not really
fixed, but there's enough workarounds now that it's passable).

Added the ability to query information about the server's operating
system through chat (/info os).

Added the ability to query information about mcpp.dll through chat
(/info mcpp).

Added hashing support for smart pointers.  May be merged into RLeahyLib.

Added a populated flag to columns.

Fixed a String serialization bug (length of the string was being
determined in terms of graphemes rather than code points).

Switched chunk serialization from a smart pointer to a raw pointer
(smart pointer wouldn't make sense given the new world container
scheme).

Added generic tuple serialization so that new 0x2C could be
serialized/deserialized.

Updated definition of 0x2C to new format.

Updated definition of 0x33 to use raw pointers instead of smart
pointers.

Added definitions for 0x35, 0x36, and 0x37.

Updated definition of 0xFE so that the parsed data is more accessible
(not just an array of bytes).

"Protocol Analysis" has now been broken out and is no longer strictly
boolean.  It can be globally enabled/disabled, or enabled for any number
of packets or modules.

Representing a packet as a string represents tuples properly, and does a
better/more general job rendering arrays.

Representing a packet as a string represents unsigned bytes and 128-bit
integers properly.

Switched the DataProvider interface and MySQLDataProvider class over to
the new column paradigm.

Loading columns is now synchronous.

Eliminated the per block/per column/world locking in favour of a per
world mutex and a per column mutex.  The more granualar locking didn't
have performance characteristics that I was happy with, and didn't
reflect the reality of the way the column data is stored (some of the
data is stored in nibbles, which means that even if you have a lock on
that block, you cannot safely write to it).

Implemented the WorldContainer class (untested).  It has support for
managing a client's columns (sending the appropriate packets), loading,
generating, populating, saving, and unloading columns as necessary,
setting and retrieving blocks, and sending packets when a block is
changed.

Implemented a rudimentary flat column provider (untested).