Internally implement 1.8 block types

In 1.8, block types were changed to unify both block types and data.

Block types are now represented as an unsigned short:
```
blockType = (char) ((extNibbleId << 12) | (blockId << 4) | blockNibbleData)
```

With this PR, we maintain compatibility with the Bukkit API and only implement this internally.
Above this diff metadata is range checked 0-16 already. The if statement makes sure that we aren't setting metadata on air, which would cause some issues.