Remove instances of unsafePerformIO

This commit exposes the Prelude.interfaces through the Elm module so that they can be more easily loaded in the IO monad of a calling program, and passed to pure compilation functions when needed. This allows us to be safe without loading the interfaces unnecessarily. It will also at some point allow for possibilities such as having the caller of the compile function define a different set of interfaces to build their program against if desired.

Opening a PR on elm-lang now as well so that it can build against this new interface. Please let me know in particular on this PR what you think about the function and types that I exposed on Language.Elm. Is it ok that they're on that module, or should we be putting them somewhere else?