Clean up dl-open features:

Add --with-dlopen=[yes,no] option to compile without loadable provider support.
Selecting no also disables the check for -ldl.

Add --with-extdir option to specify custom loadable provider dir.
Default is $libdir/libfabric.

Rename FI_EXTPATH to FI_EXTDIR for consistency with variable names and configure options.

Silently ignore extdir not found when loading instead of printing error to stderr.

Remove unused includes in fabric.c

Re-include common.c and enosys.c in dl-loadable providers, these are needed.
Mmmm.

It is very, very weird to duplicate symbols in multiple providers.

Perhaps I'm being self-serving here, but my usNIC provider can also be loaded with the sockets provider.  Then there's 2 DSOs with the same symbols.  It *should* be ok, but it's still weird, and feels quite dirty.

The fact that you're providing common code for providers to use means that you *are* providing APIs that need to be maintained -- regardless of whether they're in libfabric or not.  So why not put them in libfabric?  Then all of these issues go away (and if dlopen is failing when the symbols are compiled into libfabric, then we're doing something wrong with the dlopen -- it should be a fixable problem).