builder takes set of resources separate from job

switch config back to separate resource declaration; jobs now specify their
inputs as a simple key-value from (resource name => list of upstream jobs).
this will be used to implement pipelining; a job can expect on a resource is
the 'output' of a job (or many jobs, for fan-in).