Load extensions as modules
Extension loading is another bit of the ESM port that requires some non-default handling, so it's best done separately from the "big switch".
It also doesn't require the rest of the code base to be ported, so it can be cleanly separated from the main port.