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
When setting, you give the contexts that *all* have to match for the
given permission to be true

When getting from Subject, you give the contexts, *any* of which have to match a
combination (basically getContexts.contains setContexts)

Remember that SubjectData is raw data tho, so doesn't do these
calculations. so getting with a given combination returns only parents
set for that exact combination

On Mon, Dec 29, 2014 at 04:37:46AM -0800, ST-DDT wrote:
> > +    /**
> > +     * Return all registered parent subjects for a given context. The returned map is immutable and not a live view.
> > +     * The results of this method do not traverse any sort of inheritance structure a permissions plugin may implement.
> > +     *
> > +     * @param contexts The context to check
> > +     * @return names of parents valid in the given context
> > +     */
> > +    List<Subject> getParents(Set<Context> contexts);
> > +
> > +    /**
> > +     * Adds a parent in a particular context combination. Passing an empty context combination means the parent is added in the global context
> > +     *
> > +     * @param contexts The context combination this operation is applicable to
> > +     * @param parent The name of the parent to add
> > +     */
> > +    void addParent(Set<Context> contexts, String parent);
> 
> 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?
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/SpongePowered/SpongeAPI/pull/340/files#r22310394