Add support for static constructors

THIS IS A PROOF OF CONCEPT AND NOT YET COMPLETE.

The idea is that configure builds up a list of providers that are
statically included in libfabric.  It writes out tables of the
provider constructors and destructors in
include/rdma/fi_static_providers.h.  This file is included in
src/fabric.c.  The first time fi_getinfo() is called, it walks the
table of constructors and invokes them.

A mutex is used to ensure that if multiple threads call fi_getinfo()
simultaneously, one will invoke all constructors, and the others will
be held up until all the constructors have completed.

Additionally, fi_getinfo() will (indirectly) cause fi_ini() to be
invoked for the libfabric.a case, where fi_ini() won't be invoked via
dynamic loader constructor.  fi_ini() grew some protection to ensure
that it only invokes the dlopen() code once.

Still to do:

* Don't know what to do with the destructors yet.