+----------------------------------+
      | Vim                              |
      +----------------------------------+
      | VimDebug plugin                  |
      | ($HOME/vim/plugin/VimDebug.vim)  |
      +----------------------------------+
                      |
                      ^
                      |
                  tcp socket
                  port 6543
                      | 
                      v 
                      |
      +----------------------------------+
      | VimDebug daemon                  |
      | (./bin/vdd)                      |
      +----------------------------------+
      | Perl libraries                   |
      | (VimDebug::*) |
      +----------------------------------+
           READ                 WRITE    
            |                     |
            ^                     v
            |                     |
          STDOUT                STDIN
      +----------------------------------+
      |  Forked debugger process.        |
      |  One of:                         |
      |      perl -d                     |
      |      python -d                   |
      |      ruby -rdebug                |
      |      gdb                         |
      |      jdb                         |
      |      ...                         |
      +----------------------------------+

All debugger interfaces should inherit from VimDebug

So we have for example:

   VimDebug::Perl
   VimDebug::Ruby
   ...

These methods should implement callback functions like step(), _next(), etc.

The VimDebug daemon (vdd) calls these functions at the right time.
For example, when Vim issues a step command to vdd, vdd will call
$debugger->step(), where $debugger is for example an instance of
VimDebug::Perl.