Add `repr_c_implicit_padding` lint (off by default)

The `repr_c_implicit_padding` lint checks structures marked
a u8 followed by a u64, which would require 7 bytes of padding
to get the u64 aligned correctly.

The reason for this is that in the BSD socket code, there is
some shifty casting between structs which results in data being
stored in padding bytes. Since the LLVM Load instruction does
not copy padding, this can result in data loss. (This is also a
problem in C, but since structs are rarely copied by value,
instead using pointers and memcpy(), it is not as serious a
problem.) We therefore need explicit padding for the socket
structures, and this lint will make sure we get it.

This is necessary because the recent pull

  https://github.com/rust-lang/rust/pull/16081

which is a fix for #15763, changes the return value semantics
to involve a Load. Without padding fixes, this breaks the Tcp
code.
liblibc: Add #[repr(C)] and explicit padding to all network structures

I have only added padding for the Linux structures -- when compiling
on other systems (which I don't have available) the compiler will
flag which fields require additional padding to be added.