merge.go: had to return back to usage of append() instead of copy()

Basically, my assumption was that I can preallocate space in merger's
buffer by size of appending item and safely work with the memory knowing
that I have enough space. My validation was that when I merge a document
I always copy less or equal amount of memory (due to string deduplication).
In other words, merger's buffer grows slower then the document is processed.

This's wrong assumption. The issue is varints:
* consider merger's buffer which contain string "TEST" (A)
* consider a Sereal document with string "TEST" (B) and a copytag (C) refering to
* so, now, when I merge the document, B will be replaced by new copytag
  refering to A. Also, copytag C will refer to A as well
* if merger's buffer is big enough, new varint representation of C's
  offset can be bigger then the original one

P.S. At some point in the past I switched from append() to copy()
because benchmarks showed that copy() is faster by ~8%
merge.go: implement KeepFlat feature

If enabled, KeepFlat keeps flat structture of final document.
Specifically, consider two arrays [A,B,C] and [D,E,F]:
- when KeepFlat == false, the result of merging is [[A,B,C],[D,E,F]]
- when KeepFlat == true, the result is [A,B,C,D,E,F]
  This mode is relevant only to top level elements