If packing hits a blackhole, the packing thread should block
and retry, to get consistent behaviour at the Haskell level.
To enable this from Haskell, the core routine now checks and
evaluates the blackhole before retrying (i.e. blocks on the
known-to-be-blackholed data).
As the blackhole is not necessarily (and most likely not) the
graphroot, the C code writes its address into the buffer at
position 0. This is OK since packing fails anyway, so the buffer
won't hold any useful data.
A number of threads serialize the same data, while the test function
accesses the original in different ways (prone to blackholing).
Test runs with 10 threads by default, which is enough to trigger
some blackhole exceptions (the duplicate function will retry).