Win32: One-time initialisation of builtin name map

Define a platform-independent abstraction over the one-time
initialisation APIs of POSIX and Win32. We currently use this in only
one place, where we initialise the builtin tag <-> name mapping for XML
elements and attributes in DFNameMap.c; however, there will likely be
other situations where we want to do this in the future.

Instead of using pthread_once_init or InitOnceExecuteOnce, you now use
DFInitOnce. Here is an example of some code which will call the
specified function only once per program invocation:

    static DFOnce once = DF_ONCE_INIT;
    DFInitOnce(&once,someFunction);

As is the intention ofthe pthread/win32 APIs, if multiple threads call
this function at the same time, then the underlying APIs will guarantee
that only a single invocation of the function occurs. If DFInitOnce is
called again in the same or another thread, it won't do anything.

Note that none of the data structures or APIs in DocFormats are
inherently thread-safe, though you *can* have multiple conversions going
in different threads at the same time, as they do not use any global
data structures. So this is only of relevance for applications which use
threads (UX Write being one example).