Remove all `free`s in shmffi and ocaml_blob except one
Summary:
We are constrained to do one `free` because `caml_output_value_to_malloc` uses `malloc`, but we can actually avoid `free` in every other instance where it's used here. Wrap the use of `free` in a `Drop` impl for a new struct `MallocBuf`, representing the memory allocated by `caml_output_value_to_malloc`.
Since we use `MallocBuf` in `SerializedValue::Serialized`, `SerializedValue::from_heap_value` would need to use `malloc` (or similar) to construct a `SerializedValue::Serialized`. But we don't actually need a `from_heap_value` method, since it's only used in `shmffi_move`, which only needs to copy the heap value header and its data (which is just a byte slice).
Differential Revision:
D36879767
fbshipit-source-id:
689d4c74e061d9a1d21bef78ea0465970b501afd