Implement recursive indirect block creation for DAGs

Also cleaned up a bunch of code related to building and reading DAGs
why `select`? why not just:

```Go
data, ok := <-db.in:
if !ok {
  db.done = true
  return nil
}
return data
```