ensure that assert predicates are still syntax checked in NDEBUG build

NFAI_UNUSED is used to discard the result of the expression.
use sizeof to implement NFAI_UNUSED to guarantee no runtime execution
define NFA_API static in example.c to avoid unnecessary function exports
fix -Wunused-variable warning in nfai_assert_no_captures with NFAI_NDEBUG
fix nfai_char_class_to_ranges for input op NFAI_OP_MATCH_ANY
fix some uninitialised variable warnings from gcc
add a test script to build with many different build options

Used to check language (dialect) compatibility, and to check that no
warnings are produced with different build options.
add a clang static-analyzer build to build-all-variants.sh
fix a clang static-analyzer warning in nfai_alloc

The report was that in nfai_alloc, a NULL page could be dereferenced
(in the p = page->data + page->at; line).  That null dereference could
only happen if the requested size (sz) is zero, because the new page
allocation and page == NULL check is only skipped if free_size >= sz,
which cannot happen unless page is non-NULL or sz is zero.

Since sz should never be zero (we have NFAI_ASSERT(sz > 0) in the
argument checking block), this report from scan-build does not actually
indicate a bug.

However, in the interest of maintaining clean scan-build output, it seems
worthwhile to fix this by moving the (page == NULL) check out of the
new page allocation branch, so that the final accesses to page are
always properly guarded (even in NDEBUG builds).
splint: fix incorrect type of 3rd arg to pool->allocf

reported by splint -weak nfa.c
nfai_ascii_tolower: take an int rather than a uint8_t

This matches conventions with other nfai character functions.
add asserts that characters are in-range for nfai ascii functions
remove redundant NFAI_UNUSED(bufsize) in nfai_quoted_char

With the previous change to NFAI_ASSERT, bufsize is always "used"
(even though sometimes it's *only* used in an assert).
clarify comment about bufsize requirement in nfai_quoted_char
replace use of sprintf in nfai_quoted_char

Can't use sprintf, because it's "unsafe" (buffer overflow vulnerability).
Can't use snprintf, because it doesn't exist in C89.
fix format for printing an assert flags