Separate packages for ctypes-base and ctypes-foreign

Split ctypes into pieces:

* a `base` package with no external dependencies that provides typed access to C-managed memory.
* a `foreign` package that depends on libffi that provides dynamic binding of C functions.

These will eventually become separate opam packages.