Add a new structure type for WHNF structure blobs

We want to implement a new Haskell type called Struct, which holds
an immutable WHNF data structure with no outgoing pointers.
This structure can be serialized quickly and can be GCed without
ever traversing it (it is a sort of "older than oldest generation",
but it's not implemented as such because it would be a mess)
Add simple implementation of NFDataStruct

This implementation does not reuse code from the existing GC, even
though it does the same in practice, because it wants to sidestep
all the complications of the generational GC (which it does not need,
the to space is known and preallocated)
Add primops and primtypes for nf data structures

Add a primitive type Struct#, with operations structNew#, structAppend#
and structResize#. The type is mutable and all operations happen
in the IO monad (or rather, they thread through a State# RealWorld).
The root pointer was removed and is now stored in the wrapper
Struct (which is a normal Haskell ADT).
Add API for normal form data structures

As part of a new package, called struct, which depends on deepseq
(used to force values to fully evaluated form before appending).
The package exposes a module called Data.Struct, with the operations
structNew, structAppend, structResize and structGetRoot.
Add the beginning of a test suite

With one test, that create a simple (no cycles, no double pointers)
object, stores it in a struct, runs a GC and reads the object back.
At the same time, fix the enormous amount of bugs uncovered by
the test.
Add the other tests

Add tests for appending to a struct, for creating structs of
values that have loops, for overflowing a struct and for
resizing it.
Then fix the remaining bugs in the implementation.