Implement recursive indirect block creation for DAGs

Also cleaned up a bunch of code related to building and reading DAGs
is `blkchan` buffered? i believe not, so it will do each block sync, correct? that's a bunch of io that could probably happen asyncly and let go manage the scheduling. 

then again i may be too optimistic with goroutines ;) maybe TRTTD is land this version, and then play with tweaking these channels with buffers and see how perf is affected.