improve/fix write-only warning

This passes all tests in the testsuite now.
fix/improve types_compatible()

- Now correctly implements the rules for struct,union and enum
- Fix function type compatible rules for unspecified/kr cases
use types_compatible instead of equality in format check tests
introduce compatible_types_ignore_qualifiers()

This speeds up a typical case because no new type needs to be
constructed and even allowed to get rid of get_unqualified_type().
ignore pointer target qualifiers in semantic_comparison()
avoid unnecessary usage of get_unqualified_type() in revert_automatic_type_conversion()
remove another unnecessary usage of get_unqualified_type()