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
Is that really something we do?

On Mon, Dec 29, 2014 at 10:44:24AM -0800, Simon816 wrote:
> > + */
> > +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 {
> > +    public static final String WORLD_KEY = "world";
> > +
> > +    private final String type, name;
> > +
> > +    public Context(String type, String name) {
> > +        Preconditions.checkNotNull(type, "type");
> 
> Methods in `Preconditions` should be imported statically
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/SpongePowered/SpongeAPI/pull/340/files#r22322939