swap logging to use slf4j to allow implementations to pick the underlying implementation
Separate BlockState from Block more clearly

Remove 'extends BlockState' from Block and BlockSnapshot
Add getter for BlockState
Move getSnapshot to Block