allow more signatures, including abstract types, in cfunction()
aids #2458