Implement recursive indirect block creation for DAGs

Also cleaned up a bunch of code related to building and reading DAGs
i think these constants should be derived from the ones in the main file. something like:

```
// two levels
nblocks := 2
nbytes := BlockSizeLimit * nblocks

// three levels
nblocks := DefaultLinksPerBlock + 1
nbytes := BlockSizeLimit * nblocks
```

We should have two tests: 
```Go
TestIndirectBlocks2Levels(t *testing.T) {}
TestIndirectBlocks3Levels(t *testing.T) {}
```