Some notes on reducing monomorphizations

@matthieum I’m not that familiar with the details of LLVM mergefunc, except that it has a reputation as not working, many people have tried and failed.

A Rust implementation benefits from having much better semantic information. Concretely, this implementation only tries to merge redundant monomorphizations of the same generic function - iow the search space is very small, and hopefully more likely to find a merge, compared to LLVM’s task of merging arbitrary functions.

I don’t know to what extent mergefunc affects our compilation, though I do recall being strongly recommended we not run it because it is so broke (I think we do run it…).