Improve model tests

In the model tests, generate more kinds of programs.
Previously, only programs that failed by using 'fail' were generated.
Now we also fail decoders by running out of input, using too much or
too little input in a isolate block.
Also correct the tests when they check for labels.

This change exposes some bugs in isolate.
Bug fix isolate; decoder must use all input

A decoder could have been given the final chuck, but not used
all its input, and still succeed.
This change corrects the behavior and makes sure that isolate
must use all input in order to succeed.
Bug fix isolate; use correct offset in error message

When a isolate decoder fails, it includes information about the
offsets of how far in the decoding it got in the error message.
With this change the offset is now correct.
Bug fix isolate; keep labels from within failing isolate

When an isolated decoder failed due to over consuming input, any
labels set within that decoder were lost since demanding
more input would fail within the isolate-decoder runner and not in
the isolated decoder itself.
With this change the signal of lack of more input is passed
into the isolated decoder which in turn will fail, keeping any
labels up to that point.