Allow smaller block size in memory manager.

The mapping from pointer to block header requires that block B with
index I of region R must start at [R->start + I * BlockSize].  For
example,

  - the block size is 0x1000 (4K)
  - the region goes from 0x1200000-0x1300000 (1M)
  - then block 0x2d must cover the range [0x122d000-0x122dfff]

If the block size is very small compared to the region size, then the
first few blocks may be unavailable because they would overlap with
the meta data.
Fix bug when input Core contained "let x = y in ..."
Muck about with graph colouring code ...

... still doesn't work.
Failed attempt at fixing graph register allocator

It doesn't actually work with pre-coloured registers.  The allocator
code may ignore the pre-assigned colour and then and up assigning

    BcReg 0 _ :-> Reg 1

I tried to fix it by using special register classes for pre-coloured
registers, but that just caused the colouring code to try to spill
things which we cannot do.
Use different location environment for info tables.

In GHC, the info table and the constructor have the same Id, so we
have to keep them in separate environments.
Add NFData instances for bytecode types.
Change colour for type when printing bytecode (in lcc)
Small additions to utilities
Reset free'd memory to 0; gives better error messages
Fully expand type synonyms to get accurate pointer info

Without this change, a declaration like

    type FastInt = Int#
    data D = D FastInt

would generate meta data for D that indicates the first argument as a
pointer.   This may later cause a crash in the garbage collector.
Fix crash when printing bytecode.
Switch to linear-scan register allocator.
Add script to run benchmarks.
Add preliminary benchmark results