1) Protocol:
 All characters allowed in data, except \n and \r (0x0A & 0x0D).
 Each field ends with \n, \r is ignored.
 No escaping.
 When transfering a list, is is preceeded by the number of inclued fields.
   Example:
     3\n
     foo\n
     bar\n
     baz\n

2) Start of commit command:

BEGIN\n
<commit id>\n
<list of involved storages>

 <commit id>: must be identical to the one given when commit finishes (be it ABORT or COMMIT)
 <list of involved storages>: list of storage ids involved in the transaction
 NB: final \n is part of list representation, so it's not displayed above.

Response: (nothing)

3) Transaction abort command:

ABORT\n
<commit id>\n

  <commit id>: (cf. BEGIN)

Response: (nothing)

4) Transaction finalisation command:

COMMIT\n
<commit id>\n
<list of involved storages>
<list of commited TIDs>

 <commit id>: (cf. BEGIN)
 <list of involved storages>: (cf. BEGIN)
 <list of commited TIDs>: Length of this mist must be the same as involved storage list, and it must be in consistent order.
 NB: final \n is part of list representation, so it's not displayed above.

Response: (nothing)

5) Data read command:

DUMP\n

Response:
<list of storages>
<list of TIDs>

