public interface Toolkit
For example, to compile a Project, ideally we would want to write:
Project p = new Project(); p.compile();But if
Project does not already define a compile() method and if it is not
 sub-classable or has a blackbox implementation, this would not be possible. Even if Project
 did include a compile() method, downstream extensions may want to change the how
 'compile' works, but this is not possible without sub-classing Project or having
 it expose integration hooks.
 
 
 Instead a Compilable toolkit can be defined as:
 
 public interface Compilable extends Toolkit {
   void compile();
 }
 
 Now given a Project, a Compilable can be 'built' for it.
 
    Context context = new Context(project);
    Compilable compilabe = ToolkitRegistry.getToolkit(context, Compilable.class);
    compilable.compile();
 
 
 Extensions can plug in a ToolkitProvider and change how Compilable
 works for Projects.