Generalizing how the input to statements are handled.

Parameters are now abstracted as a Param type. There are methods withParam,
withRegister, and withTempRegister that automatically handle loading any type of
Param into a temporary register and then freeing it after it is used. This
centralizes a lot of code that was floating around everywhere previously.

Still a WIP.
New version of code generator works on all but jumps.

Also discovered a bug where multiplications weren't being captured. Apparently
in x86 one of the operands is hardwired as EAX...
Forgot to mark EDX as clobbered in Times
EVERYTHING IS FUCKED.
Hand wrote binary serializers. Way faster....
Working?!?

Looks like the new version of the code generator may actually work after all.
There was one serious issue that slowed things down a lot which was it would try
all registers as the destination for multiplications where only EAX is a valid
one. There is now a function claimRegister that will attempt to claim a specific
subset of the free registers. This allows mul to fail early if EAX is not free.

Another optimization was backward jumps are now computed on the fly. This allows
for early failure of a branch as opposed to two pass which takes a long time. So
currently forward jumps take _FOREVER_ to compute.
Merge branch 'codegen_overhaul'

Conflicts:
	hs/Igor/Eval.hs
	hs/igor-test.hs