Support for releasing the runtime lock

This change adds a new parameter to `Foreign`, [`release_runtime_lock:bool`](https://github.com/yallop/ocaml-ctypes/blob/ce075572/src/ctypes-foreign-unthreaded/foreign.mli#L15), which adds calls to [`caml_release_runtime_system`](http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual033.html#htoc293) and `caml_acquire_runtime_system` around the [call into C](https://github.com/yallop/ocaml-ctypes/blob/ce075572/src/ctypes-foreign-base/ffi_call_stubs.c#L348-L361).

Limitations: this patch only supports foreign (dynamic) binding, not stub generation, and does not add support for using callbacks together with lock release.

Fixes #16 (with the above caveats).
I'm not sure.  The Unix library typically has `Nothing` here:

```
$ fgrep 'unix_error(' otherlibs/*unix/*.c
otherlibs/unix/closedir.c:  if (d == (DIR *) NULL) unix_error(EBADF, "closedir", Nothing);
otherlibs/unix/getlogin.c:  if (name == NULL) unix_error(ENOENT, "getlogin", Nothing);
otherlibs/unix/gmtime.c:  if (tm == NULL) unix_error(EINVAL, "gmtime", Nothing);
otherlibs/unix/gmtime.c:  if (tm == NULL) unix_error(EINVAL, "localtime", Nothing);
otherlibs/unix/gmtime.c:    if (clock == (time_t) -1) unix_error(ERANGE, "mktime", Nothing);
otherlibs/unix/lseek.c:  if (ret > Max_long) unix_error(EOVERFLOW, "lseek", Nothing);
otherlibs/unix/readdir.c:  if (d == (DIR *) NULL) unix_error(EBADF, "readdir", Nothing);
otherlibs/unix/rewinddir.c:  if (d == (DIR *) NULL) unix_error(EBADF, "rewinddir", Nothing);
otherlibs/unix/select.c:    if (retcode != 0) unix_error(EINVAL, "select", Nothing);
otherlibs/unix/socketaddr.c:        unix_error(ENAMETOOLONG, "", path);
otherlibs/unix/socketaddr.c:    unix_error(EAFNOSUPPORT, "", Nothing);
otherlibs/unix/sockopt.c:    unix_error(EINVAL, name, Nothing);
otherlibs/unix/sockopt.c:    unix_error(EINVAL, name, Nothing);
otherlibs/unix/sockopt.c:    unix_error(EINVAL, name, Nothing);
otherlibs/unix/stat.c:    unix_error(EOVERFLOW, "stat", path);
otherlibs/unix/stat.c:    unix_error(EOVERFLOW, "lstat", path);
otherlibs/unix/stat.c:    unix_error(EOVERFLOW, "fstat", Nothing);
otherlibs/unix/termios.c:          unix_error(EINVAL, "tcsetattr", Nothing);
otherlibs/unix/termios.c:        unix_error(EINVAL, "tcsetattr", Nothing);
otherlibs/unix/unixsupport.c:void unix_error(int errcode, char *cmdname, value cmdarg)
otherlibs/unix/unixsupport.c:  unix_error(errno, cmdname, cmdarg);
otherlibs/win32unix/sockopt.c:    unix_error(EINVAL, name, Nothing);
otherlibs/win32unix/sockopt.c:    unix_error(EINVAL, name, Nothing);
otherlibs/win32unix/sockopt.c:    unix_error(EINVAL, name, Nothing);
otherlibs/win32unix/unixsupport.c:void unix_error(int errcode, char *cmdname, value cmdarg)
otherlibs/win32unix/unixsupport.c:  unix_error(errno, cmdname, cmdarg);
```
The [documentation for Unix_error](http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#EXCEPTIONUnix_error) says:

> the third component is the string parameter to the function, if it has one, or the empty string otherwise.

so I don't think including "ctypes" would be helpful.