Go: [API change] Abstract away from a document body compressor

Sereal version 3 introduced a new document type "3": compressed Sereal
format, using zlib compression. Hence we've got two different ways to
compress the same Sereal document body.

In order to unify the encoder interface and simplify adding a new zlib
document format, I am decoupling a compression mechanism.

Sadly it breaks the public API of the package. On the bright side the
change helps to make potential further extensions easier and more
seamless, and keep the API cleaner.

Also according to go-search.org[1] there is only a single package
"github.com/alecthomas/go_serialization_benchmarks" that depends on ours
and it yet does not use the changed API. So we are good (-:

Consider --ignore-all-space to view the diff.

[1] http://go-search.org/view?id=github.com%2fSereal%2fSereal%2fGo%2fsereal
Go: Do not set document type in compressor

Compressor is supposed to know nothing about a document header and
should work with a raw payload only. This commit is the first step
toward the goal.
Go: Rename serealSnappyLength --> serealSnappyIncremental

It's called SRL_PROTOCOL_ENCODING_SNAPPY_INCREMENTAL in the reference
Perl implementation. Renaming to make it more conformant.
Go: Prefere a document type constant over a bare number
Go: Write two basic encoder benchmarks

Benchmark encoding a complex nested data structure with a user header
into raw and Snappy Sereal documents.
Tests: Allow to compress a test corpus

I wanted to run roundtrip tests against a compressed corpus, but
Sereal::TestSet allowed to specify only a protocol version.

This change enables one to specify an optional compression via
$Sereal::TestSet::COMPRESS. By default the corpus is not compressed.
See the compress attribute in Sereal::Encode for available options.
Go: Allow to run compat tests against a compressed corpus

On command line one can pass make(1) a CORPUS_COMPRESS variable to
enable compression of a testing corpus. For instance:

    $ make compat CORPUS_COMPRESS=SRL_SNAPPY

See the compress attribute in Sereal::Encode for available compression
algorithms.

Rent. I wanted to split up a long command line in the test_dir recipe
into multiple lines, but, sigh, it's impossible:

> Sometimes you want to split a long line inside of single quotes, but you
> don't want the backslash/newline to appear in the quoted content. This
> is often the case when passing scripts to languages such as Perl, where
> extraneous backslashes inside the script can change its meaning or even
> be a syntax error.
--- https://www.gnu.org/software/make/manual/make.html#Splitting-Recipe-Lines
Go: Make compressor work with opaque data; refactor MarshalWithHeader()

This is a follow up on 16cad24. Compressor is supposed to know nothing
about a document header and should work with a raw payload only. This
commit is the first step toward the goal.

Now a compressor takes an opaque blob of data, compresses, and
returns it back.

As a side change I renamed variables b and encoded; and explicitly
separated encoded document header, optional header suffix, and body.

Concatination of encoded header and body is done in a suboptimal way,
but I plan to improve it later on.