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
Global context is empty context set

On Mon, Dec 29, 2014 at 03:28:12AM -0800, ST-DDT wrote:
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> > + * THE SOFTWARE.
> > + */
> > +package org.spongepowered.api.service.permission.context;
> > +
> > +import com.google.common.base.Preconditions;
> > +
> > +/**
> > + * The context that a permission check occurs in. Instances of a context are designed
> > + * to function as cache keys, meaning they should be fairly lightweight and not hold references to large objects
> > + */
> > +public final class Context {
> 
> Shouldnt there be a global context too instead of only world context?
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/SpongePowered/SpongeAPI/pull/340/files#r22309117