Change block connection architecture to directed graph representation
Consider changing architecture of block connections to be represented instead by a directed graph data structure. This would permit lazy evaluation: a particular signal would be derived only when requested by backtracking the contributing sources and tracking when changes have been made that would alter the derived signals. This also solves an existing issue where outputs are derived multiple times, e.g. when an XPCG module is connected to multiple output wires.