Implement recursive indirect block creation for DAGs

Also cleaned up a bunch of code related to building and reading DAGs
maybe expand on _why not_  to share memory? like, when might it be modified, etc?