1.8 Protocol Update

Adds the new 1.8 protocol.
Going from the C11 standard (as c++ depends on c so  we can probably rely on it being the same in c++) shifts filling with zeros are guaranteed for unsigned values and positive signed values which means . Negative signed values have implementation defined behaviour meaning that signed values can use either form of shift on two's complement architecture.

A clearer way of writing this in c++ would of course be:

```
a_BlockX = (Value >> 38) & 0x3FFFFFF;
a_BlockY = (Value >> 26) & 0xFFF;
a_BlockZ = (Value & 0x3FFFFFF);
```