Attempt to make is slightly more plausible to use IvoryT.

This is just shifting code around, the main goal of this
is to re-arrange things such that it is plausible that
I can use the profiling code in the snapshot code to
support the performance changes I am making after this.

This makes things uglier in some spots, but with the
goal of it making everything better. Still undecided
if it is too dodgy, but figured it is worth making a
small step to demonstrate direction I am heading.

Will add some more tests and combinators if I decide 
to proceed.