The plugins in POY are functions that take user-provided arguments,
a structure of type Phylo.r, and outputs a new Phylo.r. Phylo.r has
everything the runtime system has in memory at that point (excepting
a few counters here and there).  The user-provided arguments have
the type Methods.plugin_argument (see src/methods.ml).

Once a function my_plugin_function is created, it can be registered using:

let () = Phylo.register_function "name" my_plugin_function

In this way, upon loading the plugin, it will self-register in the runtime
system. No functions to register the library from POY are provided. The function
will then be callable using the command:

name (arguments) 

where the argument structure is defined by the type that is matched by
my_plugin_function. See the example in supramap.ml for to follow better how to
do this.

COMPILING:
To compile a plugin located in PATH/my_plugin.ml
    - Configure and compile POY as usual.
    - cd src
    - make PATH/my_plugin.cmxs
    
    The plugin will appear as PATH/myplugin.cmxs ready to use in the native
    version of POY, as follows:

    poy -plugin PATH/my_plugin.cmxs

    For faster development, you might want to, instead, test things with the
    bytecode version (non-parallel). In this case:

    - Configure 
    - cd src
    - make mpoy
    - make PATH/my_plugin.cmo

    In this case poy's executable has the name mpoy, and the file
    plugin has name my_plugin.cmo, which can be used as follows (within the src
    directory)

    ./mpoy -plugin PATH/my_plugin.cmo


LIMITATIONS
- A plugin must be compiled with the same version of OCaml and the same source
  code, and flags used to compile the binary it will run with.
