Implement recursive indirect block creation for DAGs

Also cleaned up a bunch of code related to building and reading DAGs
why `8192` ? 

-  `8192 * 258 = 2113536`, over the 1MB limit above.
- `8192` is _a lot_. linearly searching that sounds painful. 

I think this will vary by datastructure, but maybe we can make `unixfs` do something like `64`, making the block ~16k. We really need careful analysis to pick these numbers. we should have a doc to track all these important constants somewhere.