When differentiating fn_to_diff, take a outer_fn and generate another
function with expected naming and calling conventions which will be
discovered by the enzyme LLVM pass and its body populated with the differentiated
fn_to_diff. outer_fn is then modified to have a call to the generated
function and handle the differences between the Rust calling convention and
Enzyme.