Merge compiler configuration for GNU and Clang
Add option NO_UNDEFINED to disable --no-undefined

When using address sanitizer, several symbols are added to object files.
If linking them with `-Wl,--no-undefined', the linking will fail due to
undefined symbols. The option NO_UNDEFINED is added to disable
`-Wl,--no-undefined'.
Fix travis-ci address sanitizer build