plugins: move namespace check into new process-wide plugin init()

When a plugin is loaded, it calls hwloc_plugin_check_namespace()
to check whether it can find core symbols. It avoids segfaults
caused by namespace issues later (see commit 82231d2d).
This uses ltdl, which means it must be serialized with other ltdl
calls. The main component mutex only protected plugin load/unload
so far, we need to extend it to that check as well.
Otherwise we get race conditions (and deadlocks) in ltdl when
multiple threads load multiple topologies at the same time.

Add new process-wide init() and finalize() component callbacks
that are called after/before loading/unloading plugins, while
holding the component mutex.
Move calls to hwloc_plugin_check_namespace() there instead of
later in the component code (e.g. in the instantiate() callbacks).

** This breaks the plugin ABI (bump from 3 to 4) but we're
** still not aware of any external plugin so it's not too bad.

Document that components using ltdl internally should do so
inside these new callbacks only.
It could also be used to force OpenCL to load its own plugins
(by calling clGetPlatformIDs()) while hwloc holds the component mutex.
We'll see if we ever meet such an issue
(I thought it was the culprit first, but it's not).

This simplifies the initialization of the libxml component
we finally have a unique first entry-point.

Thanks to Andra Hugo for reporting the problem.
No thanks to the QR-MUMPS software for creating one topology
per OpenMP thread in each parallel region :)