Plugin for uim

------------------------------------------------------------------------------
- Traditional input method plugin system

uim supports plugin system which loads dynamic library and scheme definition
as a input method module.

uim's plugin may consist of scheme file and/or dynamic library.

    ___________    (require-module "foo")
   |           | ------------------+--->  libuim-foo.so
   |  libuim   |                   |
   |___________|                   +--->  foo.scm

 When called (require-module "foo") from libuim scheme engine, libuim-foo.so
 is loaded if existed and call 'uim_dynlib_instance_init' in libuim-foo.so
 first. After that 'foo.scm' is loaded if existed.

* For end users
 If you want to install 3rd party plugin, you have to place both the dynamic
 shared object and scheme file to ~/.uim.d/plugin/.
 For example, if you want to install "foo", you have to put both
 libuim-foo.so and foo.scm to ~/.uim.d/plugin. And you need to invoke
 following command to enable the plugin.

   $ uim-module-manager --register foo --path=~/.uim.d/plugin

* For system admins
 If you want to install 3rd party plugin, you have to place the dynamic shared
 object to ${pkglibdir}/plugin/ and place the scheme library to
 ${pkgdatadir}/.

 For example, if you want to install "foo", you have to install libuim-foo.so
 to ${pkglibdir}/plugin and foo.scm to ${pkgdatadir}/. If you want to enable
 this for all users, invoke following command.

   $ sudo uim-module-manager --register foo

* For plugin developers
 uim_dynlib_instance_init(void): Called when plugin is being loaded. In most
                                 case, initialize variables and bind scheme
                                 symbol and C functions.
 uim_dynlib_instance_quit(void): Called when plugin is being unloaded.

 - Plugin's loading scheme:
  1. Plugin loading
   dlopen(libuim-foo.so) -> call uim_dynlib_instance_init -> call "foo.scm"

  2. Plugin unloading
   call uim_dynlib_instance_quit -> dlclose(libuim-foo.so)

------------------------------------------------------------------------------
- Dynamic library loading

From 1.6.0, uim supports plugin system which loads dynamic library explicitly
from scheme file.  Use this system if you want to use external C code or
library from scheme side.

    ___________  (require "foo") --> (require-dynlib "bar")
   |           |
   |  libuim   | ---------->  foo.scm --------> libuim-bar.so 
   |___________|

 When called (require-dynlib "bar") from the top of foo.scm, libuim-bar.so is
 loaded and 'uim_dynlib_instance_init' in libuim-bar.so is called.

* For developers
 uim_dynlib_instance_init(void): Called when plugin is being loaded. In most
                                 case, initialize variables and bind scheme
                                 symbol and C functions.
 uim_dynlib_instance_quit(void): Called when plugin is being unloaded.

 - Plugin's loading scheme:
  1. Plugin loading
   (require-dynlib "foo") -> dlopen(libuim-foo.so) -> call uim_dynlib_instance_init -> (provide "foo")

  2. Plugin unloading
   (dynlib-unload "foo") -> call uim_dynlib_instance_quit -> dlclose(libuim-foo.so)
