buffer: add dispose to Buffer instance api

Users now have the ability to manually dispose a Buffer when it's no
longer needed. This will transform the instance into a zero-length
Buffer. If the instance was a slice then the memory is not actually
released, but the pointer to the parent allocation is removed.
benchmark: count by measuring buffer length

Now that offset/length are no longer passed to the onread callback, it's
necessary to increment by the passed buffer length.