Add Block State API

An API to access a block's state. This is based on the new block state system in 1.8 which replaces the concept of metadata. It provides a type safe way of accessing metadata. This pull request supports boolean, int, string and direction for the types a block state can have. 
This needs to be addressed before the PR can be pulled