Fix yields inside blocks and DRY up yield/block funcs

Blocks within blocks need to open a buffer, then write to the buffer
under the one they opened. yields need to write to the top buffer, but
both are using the same function. Blocks won out, but now they will
coexist.