1.8 Protocol Update

Adds the new 1.8 protocol.
How about
```
Int32 a_BlockXRaw, a_BlockY, a_BlockZRaw;
a_BlockXRaw = (Value >> 38) & 0x3FFFFFF;
a_BlockY = (Value >> 26) & 0xFFF;
a_BlockZRaw = (Value & 0x3FFFFFF);
a_BlockX = (a_BlockXRaw & 0x2000000) ? a_BlockXRaw : (~(a_BlockXRaw & 0x1FFFFFF)) + 1
a_BlockZ = (a_BlockZRaw & 0x2000000) ? a_BlockZRaw : (~(a_BlockZRaw & 0x1FFFFFF)) + 1
```

And if you really care about portable network encoding then I suggest you move this out into a templated method. A lot of the protocol code does similar things but makes assumptions about the host systems.