Partial type-convertible changes

float and double aren't equal, int and char, etc. This changes how we
compare b-types - some are convertible (e.g. float and int) and others
aren't (e.g. struct and char).
Fixed enum comparison in x86_64 backend
First half of the type_cmp() refactor
Compiling refactor of type_cmp()
Allow NULL in assignment to function pointers
Fixed type_to_str spacing
Correct type qualifier checks
Merge branch 'experimental/type_convertible' into experimental/float