rewrite nextBlock to properly deal with padding and unrecognized blocks

- padding can now be any size up to 2^24-1, the maximum representable
  block size.

- unrecognized blocks are detected before block data is read.  this
  fixes error reporting in certain situations that should return
  'unrecognized block type' but would return something else like
  'encoded data too large'.  this should provide somealbeit minimal
  benefit in terms of allocations and io.
fix handling of unskippable blocks and clean up crc verification
don't use goto -- what the fuck was i thinking
go back to switch