This allows SymbolTables to hold actual requirements (which
IntermedSymbolTable already did, but without pulling in the right
interface). It means that values like kernel_virtual_offset get saved.
We still need to figure out how to allow plugins to demand optional
configuration values in other places (such as the kvo) but for now the
plugin will barf if it doesn't get it.
So this is where I ripped out the guts of the dependency tree
and made it a little better defined in some ways, and delayed
populating it in others. The validate function signature has
changed and I'm still up in the air whether to validate with
True/False or throw/catch exceptions.
So now, configurables have a list of requirements, these are
then bundled into a single requirement and can be passed to
automagic. Automagic runs a set of things over the deptree
to help build/manage it. These run in order of priority.
The tree is still built from the top down, but now automagic
can build branch from the bottom up and try and splice them
into the tree where appropriate. Hopefully this will make it
easier to see follow.