Run the do_init function, rather then module-level code

The problem with running module-level code is that it
is impossible for the user to import their initialization
code without running the same code that the plugin runs.
This could be a problem, for example, if the user wants
to write tests for functions they include in their
initialization module.
The changes in this branch will cause the plugin to load
the user-defined module and then call the do_init function
in that module (without any arguments). It essentially
wraps code that was at the module level in a function
named do_init so that code does not get run
unexpectedly.