multiple fixes and improvements
- machine-level loop analysis (dom tree, loop nest tree, etc)
- changed rules on tree generation at IR level (only put nodes whose only use immediately follows their definition as children)
- more properly deal with addressing modes on x86 backend
- fixed bugs in register allocator
- check invariants in register allocator (by default, it is turned off)
- new heuristics about spilling, and color assignment
- fixed mov generation from go-to-with-values form that may move a value to itself (when a block branches to itself)