Allow shared libraries to be loaded at run time instead of at load time
In trying to wrap a C library in nim, there are a few different ways one can do it:

1) Compile the C library, compile nim files and link statically.
2) Compile the C library, compile nim files and link dynamically.
3) Compile nim files with `importc` pragma and load the C library when the executable or the library is loaded.
4) Compile nim files with `import dynlib` and load the C library at run time, and load the appropriate symbol when required.

nimterop currently works great with options 1), 2) and 3). nimterop currently does not support 4).

**Advantages**

There are a few advantages that come to mind when the library can loaded dynamically at runtime. 

_The developer of the nim c wrapper does not have to make assumptions about what the version of the library is installed at run time._
 
For example, one could write nim code that abstracts ABI differences of `libraryA.so.1.2.3` and `libraryA.so.3.1.4`. As long as a user as a version of libraryA, the nim binary or shared library one ships will work on their machine.


_The developer of the nim c wrapper does not have to make assumptions about where it is located._

One can ship a precompiled binary to a user, and as an example tell them to set an environment variable called `LIBRARYA_INSTALL_PATH`, which can be read by the nim binary at run time and load the c library from that path. 

**Disadvantages**

The shared library is loaded at run time and the symbol for the shared library are cast from pointers to memory loaded at run time. This can introduce bugs / segfaults if not implemented correctly (although I think the same bugs will exist with option 3), and will most likely cause a hit on performance (probably more than you would incur if you used option 3).