Permissions API

Permissions/Groups API specification, minecraft/forge patches and default implementation by me and @AbrarSyed
Just a note, whats wrong with using a FakePlayer? they could easily set the UUID for the fake player before making the check. Which they should as they pass FakePlayer to certian areas such as setBlock or the like that it's vanilla code that would check the permission without distinguishing if its a fake player.