I oppose the `mt.allow_mismatch = ...` approach, since then you're exposing the guts of `ModulesTool`, which is bad imho. At best, it should be `mt.set_allow_mismatch(...)`, but then you need to do that everywhere where a modules tool is initialized (which might be only here given that this is a wrapper function, but I'm not 100% sure).

It looks like overkill now to pass down the full `build_options` to the modules tool, but I know for a fact that we'll need to pass another build option down to the modules tool (I just can't recall from the top of my head which one).

So, then we're back to passing several named arguments, which is exactly what we got rid of by introduction `build_options`?