py: Make mpz able to use 16 bits per digit; and 32 on 64-bit arch.

Previously, mpz was restricted to using at most 15 bits in each digit,
where a digit was a uint16_t.

With this patch, mpz can use all 16 bits in the uint16_t (improvement
to mpn_div was required).  This gives small inprovements in speed and
RAM usage.  It also yields savings in ROM code size because all of the
digit masking operations become no-ops.

Also, mpz can now use a uint32_t as the digit type, and hence use 32
bits per digit.  This will give decent improvements in mpz speed on
64-bit machines.

Test for big integer division added.
py: Fix definition of sys.maxsize with mpz changes.
unix: Don't use -Wno-error=cpp or #warning; fix strict alias warning.

For the sake of older versions of gcc (and other compilers), don't use
the #warning CPP directive, nor the -Wno-error=cpp option.

Also, fix a strict alias warning in modffi.c for older compilers, and
add a test for ffi module.

Addresses issue #847.
py: Correctly set sys.maxsize value for 64-bit.

Type representing signed size doesn't have to be int, so use special value
which defaults to SSIZE_MAX, but as it's not defined by C standard (but rather
by POSIX), allow ports to set it.
modstruct: Implement 'O', 'P', 's' types for packed structs.

This is required to deal with, well, packed C structs containing pointers.