This is almost the last part. Only the following work remains:
final cleanup/conversion of HLS parts & remove type::copy method
API cleanup (remove residual methods, systematically make everything based on ptrs, consistent naming across different parts of the code, some consolidation of helper functions etc.)
Convert all remaining llvm operators to operator on std::shared_ptr, remove any method that requires copying types.