Get rid of ugly init hack

The entries of the init.list file now consist of two parts - level
and module name. The level field controls the order of module
initialization and cleanup (dependent modules should have a greater
level than those on which they depend).

This frees us from the need to manually call sampgdk_callback_init()
in callback_register().
Call module cleanup functions in reverse order