Implement recursive indirect block creation for DAGs

Also cleaned up a bunch of code related to building and reading DAGs
shouldnt this just be `return node` ? otherwise, i think this will happen:

![](http://i.imgur.com/lcnnynB.png)

more generally, i think there's a bunch of duplication in `fillNode`, `fillNodeRec`, and `BuldDagFromReader`. I'll take a stab at it.