Binary data packer and support for custom packers

This adds support for a packer that does no processing on input (which must be "bytes()") and the possibility for the caller to specify its own custom packer object.