First pass at dependency graph.

If a dependency is not fulfilled get angry.
Reorder plugins to satisfy dependencies.

This uses Topological sort with before, after and phase.

Still gets angry if something is not available.