Additional fixes for raw compression and the new split code, we need to
promote a key any time we haven't written the last block, regardless of
whether or not there are more rows to compress.

Clarify "final" (it's a flag if there are more rows), and "single" (use
explicit tests).

Eliminate some goto's and simplify the code flow.

Reference #984, #991.
If not the last block and the compression function ate it all, there are
problems: First, with row-store objects where we're potentially skipping
updates, we have to have a key for the next block so we can figure out
with what block a skipped update is associated.  Second, if the
compression function compressed all of the data, we're not pushing it
hard enough (unless we got lucky and gave it exactly the right amount
to work with).  We deal with both of these problems by accumulating more
data any time we're not writing the last block and the compression
function took all of the data.

Reference #984, #991.