normalize CFunction creation

when a CFunction is created with a single CVoid() parameter
that parameter is removed. Arrays and Function parameters
are automatically converted into pointers
support different strictness levels in linking

the previous comparison was too strict. now it compares
normalized signatures.

normalization can be done at different strictness levels.
at the strictest level signatures are compared and must
be identical except for simple equivalence rules like
CPointer(x) == CArray(x)

at the most relaxed level only names are compared without
types

at the medium level various normalizations are performed
treating all integers and all pointers as equals

fixes bug #18
rename refactoring for readability
add missing test file for prior commit (linker normalization)
Merge branch 'NormalizeLinker'