Optimize `Llio`

See https://github.com/Incubaid/arakoon/commit/224dbc9fee05bfd4600d7c965dca61168a423a82.patch for a rationale.

Will launch CI first.
The serialization could indeed be done in entirely different ways, e.g. by not using a Buffer.t but instead sth along the lines of
```
type t =
| String of string
| Int64 of Int64.t
| Cons of t * t
| ...
```
and then write that to an output channel using io vectors...

But I propose not making perfect the enemy of good here.
I think that in case you want to go multi-threaded there's a lot more to be checked anyway, so I would still favor omitting the allocation, but if you want to keep it like this then that's fine for me too.
Maybe we should start annotating where we should be careful / make changes when/if we go multi-threaded?
Anyway, with or without the extra string allocation: the biggest part of this optimization is already realized... so LGTM