Add tools to Algorithm inputs and use caching
This addresses #126 (closed) by adding inputs to tools held by algorithms to the return value of Algorithm.all_inputs
.
While I was working on that I noticed a large fraction of time was spent in all_inputs
and other data-flow-traversing functions during configuration. Because data flow is immutable in PyConf we can cache the results of such functions, and so I've added that in a few hot-spots here.