Implementation of a context-based permissions API

This API provides a lot of functionality for permissions providers,
including transient permissions, various contexts, and a basic
inheritance structure. This API is meant to serve as a flexible base to
build on.

There may be some utility classes added as I get to implementing this API in PEX and in Sponge (the default MC permissions system), but this PR has the API as I think is good
If checking if the subject has a parent do i have to request the same combination of contexts or is it enough to request one of them?