Modify TcPlugin interface, and move loading of plugins to `initTc`

The typechecker plugins are now written in a restricted monad, which
wraps TcM.  See TcPluginM in TcRnTypes and the related funcitons
in TcRnMonad.

Also, plugin loading now happens when initializing the type-checker,
conditional on a boolean flag.  The flag is important, so that we can
disable plugin loding while loading the plugins themselves, to avoid a loop.

Also, uses of `initTcInteractive` that are related to dynamic loading
were renamed to a separate function: `initTcDynamic`.