An array of flat tuples.
A flat tuple is like an ordinary OCaml tuple, except it is second class and mutable.
The flat tuples in a Flat_array.t are layed out sequentially in a single array, with
each flat tuple's components immediately following the components of the prior flat
tuple. A flat tuple is not first class -- one can only refer to a flat tuple via its
index in the array holding it. Flat tuples are mutable via Flat_array.set.
The type of a flat-tuple array. 'slots will look like ('a1, ..., 'an) Slots.tn,
and the array holds flat tuples of type 'a1 * ... * 'an.
set_to_init t i sets flat tuple i to the init that was supplied to create.
is_init t i returns true iff flat tuple i's slots are identical to those of
the init supplied to create.
get_all_slots t i allocates a new ordinary OCaml tuple whose components are equal to
the slots of the flat tuple at index i of t. This is esentially an allocation
plus a blit from t to the newly allocated tuple.
set_all_slots t i tuple sets all slots of the flat tuple at index i of t to
their corresponding components of tuple. This is essentially a blit from tuple to
t.
It is required that 0 <= i < length t.