Implement outlining routine. Handles all valid cases, including multiple entry / exit points. Currently uses Undefs and accepts / returns all possible data items. Accepts / returns a control indicator to communicate control flow. TODO: use summation types instead.
Dumby outlining pass to outline all of each function. This is so the original entry function can get lowered by the Rust backend, and the new non-entry function can get lowered using a new CPU backend.
A cool demo: cargo run --bin hercules_driver hercules_samples/matmul/src/matmul.hir "Xdot(false) Outline Xdot(false) Inline DeleteUncalled SROA DCE Xdot(false)".