Exploratory CPU backend
This MR accomplishes the following:
- Compute anti-dependencies between array reads and writes in IR
- Identify logical array allocations - this identifies the size of each individual allocation, and which nodes use which allocation
- Create an incomplete LLVM IR backend for Hercules IR - uses the Inkwell library
- Inkwell is not feature complete - we will want to emit IR text manually in the future
- Incorporate anti-dependencies into global code motion
- Various helpers for IR - iterators for dominator tree, types, constants
- Remove bitflip op - just not on an int value
- Improve dot graph layout
The matmul.hir example can now be compiled into LLVM IR. When hooked up with some manually written C, it does a matmul properly.