Properly set warning and warning suppression flags.

Sick of "'hash' defined as a struct template" on Travis/clang? Me too...

We pass the `-Wno-mismatched-tags` but it gets overriden by a subsequent `-Wall` which results in page after page of "'hash' defined as a struct template" warnings.

Properly order the `-Wall` commmand line argument, so that *all* warning suppression flags we set get respected instead of being ignored/overriden.