Rework parsing of BlockGroup contents.  Fixes #25.
Rework parsing of BlockGroup contents.  Fixes #25.

The original parser paused at a Block and let the parser handle other
BlockGroup elements seperately, but this made it impossible to access
their values at the time a packet was being read and returned.

It also had the limitation that a BlockGroup must contain, in the
following order: a Block, then optionally: BlockDuration,
DiscardPadding, and BlockAdditions.  If these items were present in some
other order, they would not be parsed correctly.

The fix was to make the entire BlockGroup a "suspend" item (rather than
the Block) and handle parsing the entire BlockGroup contents when
reading a packet.

This is pretty hacky, but an improvement on what existed before.
Ideally, the main parser loop in ne_parse would handle this, but we have
the concept of "suspend" elements to avoid reading large chunks of
binary data into the main allocation pool (which is only freed when the
context is destroyed).  It'd be possible to use the main parser loop for
this if each SimpleBlock/BlockGroup had its own pool.

SingingTree/nestegg,SingingTree/nestegg,fallaciousreasoning/nestegg,kinetiknz/nestegg,SingingTree/nestegg,kinetiknz/nestegg,kinetiknz/nestegg,fallaciousreasoning/nestegg