Redefine #'copy so that it has one required argument (source) and one
optional argument (destination). For marrays, create a destination
using make-marray, if one was not given, and then use the memcpy
functions to fill the values. For all other mobjects, copy will copy
objects by calling one of two generic functions, #'copy-to-destination
and #'copy-making-destination, depending on whether a destination was
supplied. The former is defined if a GSL _memcpy function exists.
The latter will look for a GSL _clone function, then make a CL
instance with the pointer returned as mpointer. If there is no clone
function, it will attempt to make a new object using make-load-form,
so will fail if that method has not been defined.
Added a check to defmfun that signals an error if a variable is used
in the C arguments other than top-level that is not used in the CL
arglist. This should not happen and is usually an indication of a