Go: Add support of the new CANONICAL_UNDEF tag added in v3

Sereal protocol version 3 introduced the new CANONICAL_UNDEF tag, used to
represent Perl's canonical shared undefined value (PL_sv_undef) in certain edge
cases. For more details see:
https://github.com/Sereal/Sereal/blob/master/sereal_spec.pod#user-content-dealing-with-undefined-values

The implementation re-uses the existing type PerlUndef. In Go there is no
distinction like there is in Perl, hence it makes sense to have all flavors of
undef to be of the same type. However for compatibility with Perl we provide a
way to pick which exact undef you want to encode.

Consider --ignore-all-space to view the diff.
Go: Switch compat test corpus to version 3

Since the support for CANONICAL_UNDEF was implemented, tests started passing,
yay!

    (1) mvuets@tomopalilaso:~/go/src/github.com/Sereal/Sereal/Go/sereal$ make test_all CORPUS_PROTO_VER=3
    rm -f test_dir/VERSION_*
    perl -Mblib=../../Perl/Decoder/blib/ -Mblib=../../Perl/Encoder/blib -I../../Perl/shared/t/lib/ -MSereal::TestSet -MSereal::Encoder -e'$Sereal::TestSet::PROTO_VERSION=3;Sereal::TestSet::write_test_files("test_dir")'
    touch "test_dir/VERSION_3"
    go test
    PASS
    ok      github.com/Sereal/Sereal/Go/sereal      0.054s
    rm -f test_dir/test_data_*-go.out
    go test -test.run=TestCorpus
    PASS
    ok      github.com/Sereal/Sereal/Go/sereal      0.032s
    prove ./test-compat.pl
    ./test-compat.pl .. ok
    All tests successful.
    Files=1, Tests=714,  0 wallclock secs ( 0.11 usr  0.01 sys +  0.20 cusr  0.02 csys =  0.34 CPU)
    Result: PASS
Go: Do not re-build a test corpus if a requested version didn't change

In 9d782ae I introduced an ability to run tests against a custom corpus
version, specified on a command line. But that change caused a corpus to be
re-generated each time tests would run. This commit fixes the regression.

Thanks @dgryski for the hint.
Go: Add TODO note on setting the document type in encoder