Use an IR format.
Introduced ir_optimizer

Currently merges add/move operations in sequence into one add/move
operation.

This makes the generated LLVM code a bit smaller.