Implement recursive indirect block creation for DAGs

Also cleaned up a bunch of code related to building and reading DAGs
this just tests that the thing worked (we should def have one test like that), but another test, that introspects the dag to make sure the right data got put in the right bock would be good.