Silence spurious clang warnings

Silence clang warnings under --enable-expensive-hardening, including:
  + implicit truncation of 64 bit values to 32 bit;
  + const char assignment to self;
  + tautological compare; and
  + additional parentheses around equality tests. (gcc uses these to
    silence assignment, so clang warns when they're present in an
    equality test. But we need to use extra parentheses in macros to
    isolate them from other code).
Silence spurious clang implicit 64 to 32 bit truncation warnings in trunnel

clang warns that a few implicit casts in trunnel truncate values from
64 to 32 bit. We do explicit casts to silence these warnings.
Merge branch 'silence-warnings-in-macros'