warnings: add compiler warning options to configure

These are mainly useful for the pull-tester. Once stable, it may be reasonable
to turn the warnings on by default.
warnings: enable quiet builds
warnings: use new warning settings and add clang builder
warnings: remove unused variables
warnings: initialize arrays to 0

foo[] = {} is a gnu extension.
warnings: shut up about unused params
warnings: let the external functions see their prototypes

They may need to set attributes like visibility=default.
warnings: make warnings errors and let's see what breaks
warnings: fix possible overlength string
warnings: unsigned can't be negative
warnings: make gcc happy with parentheses
warnings: fix struct padding. This is the _wrong_ fix.

There are several places that use sizeof(struct) for tests, where the struct's
size may be padded by the compiler. Those need to be sanitized.
warnings: fix pedantic compiler warnings

Most of these are related to implicit sign conversion and width narrowing. They
have been "fixed" with casts in order to create a starting point for fixing
them correctly. Many of the changes in this commit are most definitely logically
_wrong_, but attempt to be consistent without breaking any functionality.

For example, the following old code:

  unsigned int a;
  int b = a;
  uint64_t c;
  uint32_t d = c;

Has become:

  unsigned int foo;
  int bar = (int)foo;
  uint64_t c;
  uint32_t d = (uint32_t)c;

This of course does nothing to fix any consequences of the narrowing and sign
conversions, but the casts become explicit.

By doing this as a first step, any attempt to fix the explicit casts more
correctly, while introducing a new warning, will be noticed by the pull-tester.
warnings: explicitly call out __int128 as a gnu extension

Otherwise -pedantic (correctly) complains.