fix foreach catch of break bug
add BLOCK_8() macro
WIP: Always stream object/array endings

It turns out that we must always do this to avoid ambiguities.  But it's
tricky because we need to output two things in a case like `[0]`: one is
the path (`[0]`) and the leaf (`0`), and the other is the fact that this
is the end of that array.  To make it easier on the parser we output a
third value, `true`, when the path and leaf are at the end of an
array/object.  That's a bit weird, but hey.