Using -Wincompatible-pointer-types with Clang only

Check for Clang before adding -Wincompatible-pointer-types
in 'debug' and 'maintainer' builds, as older (?) versions
of GCC don't support it.
Fixed new GCC warnings in core.c

Enabling -O1 optimizations in 'maintainer' builds revealed some
new warnings about use potentially uninitialized variables.
Voice killing logic

Still having some double free and segfaults, but they're tricky
to repeat. Are voices detached and unlinked as intended?
Minor refactoring