Implement recursive indirect block creation for DAGs

Also cleaned up a bunch of code related to building and reading DAGs
seems like blocking will be slow (i.e. the pinner can batch updates), and not blocking at all might put the whole dataset into memory. _This_ might be a good case for buffered channels.