run mthread test on four cores
Block/retry if a blackhole is met during packing

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.
actually check output, fix a glitch in expected output