Update for ghc 7.8
Split up and implement a lot of GC.
Clean up and test and stuff.

Finally figured out this bug.