cfunction
(marshal x &opt reverse-lookup buffer)
Marshal a value into a buffer and return the buffer. The buffer can
the later be unmarshalled to reconstruct the initial value.
Optionally, one can pass in a reverse lookup table to not marshal
aliased values that are found in the table. Then a forwardlookup
table can be used to recover the original value when unmarshalling.