Add basic block events

As the block API got merged recently, I made some basic block events. Even if this PR won't get merged, it would not hurt to discuss about block events.

Edit: There is also issue http://issues.spongepowered.org/youtrack/issue/SPONGE-62

Edit 2: This also contains rewritten cause and reason system at now... I had to include then as I really needed them for certain events.
There are a lot of constructors that accept a reason (see below?), for example `Cause(Block block, Reason reason, Cause parent)` or `Cause(Block block, Reason reason)`. You can just give null to this and you have the problem already.