Move funptr and funptr_opt to the Foreign module.

The ctypes package now has no dependence on libffi.
Tweak passability tests to distinguish libffi's restrictions from C's.

Before this change, types were rejected during function type
construction if they were not supported by libffi.  For example,
libffi doesn't support union arguments, so the following code would
raise an exception

    let u = union "u"
    let i = field u "i" int
    let f = field u "f" float
    let () = seal u

    u @-> returning void     (* raises Unsupported *)

This was mostly fine, since binding to C functions using libffi was
the main reason for constructing function types.  Now that libffi is
only used within ctypes.foreign we need more careful distinctions.
Types that are not permitted as arguments or return types in C (i.e.
arrays and incomplete aggregate types) -- are rejected during function
type construction; types that are not supported by libffi are rejected
during foreign binding.

   let s = structure "s"

   let _ = s @-> void      (* raises Unsupported, since s is incomplete *)

   let a = field s "a" (array 3 int)
   let () = seal s

   let t = s @-> void      (* No exception; passing structs with array members
                              by value is valid in C. *)

   let f = Foreign.foreign "f" t
                           (* raises Unsupported, since libffi does not support
                              passing structs with array members by value. *)