Make pullblock() and trimblock() aware of extra data

Note that there is an odd semantic used by TCP, where it
expects to be able to call trimblock() on a pure ack (thus
leaving 0 valid bytes in the block), and yet not have the
block freed.  That meant that it wasn't as simple as just
using pullblock() to prune the leading space & is the
reason for the _pullblock() helper which retains an empty
block when free != 0.

Thanks to Barret for catching some bugs in the first version
of the patch.

Signed-off-by: Andrew Gallatin <gallatin@google.com>