Modernize code and change Elm.Compiler.comiple API

Someday, it will be necessary to generate source code that knows which
package each module came from. As is, it’s possible for two unexposed
modules in different packages to interfere with each other.

This new API points to how things will be once that is fixed.