Permissions API

Permissions/Groups API specification, minecraft/forge patches and default implementation by me and @AbrarSyed
This is for the Permission system to decide what it has a default context for.
 Example: If a player is passed in, a PlayerContext is returned. If a TE is passed in, a LocationContext is returned. And so on. This is because the context must be readable and known to the Perm system, while the mod thats sending it in only needs to obtain an instance to send in.