Make modules that depend on more than SDL optional.

This involved having a try_import function that tries the import,
and synthesizes a fake module if the import fails. It also involves
registering init and quit functions, and then using those registries
when init and quit are necessary.