Define PTHREAD_MUTEX_INITIALIZER and PTHREAD_ONCE_INIT for all supported platforms.

Rationale.

1. All supported platforms *must* define these, and it's quite painful that each is inconsistent.
2. PTHREAD_MUTEX_INITIALIZER and PTHREAD_ONCE_INIT are all zero initialisers.
3. You will always runtime initialise a mutex with ``pthread_mutex_init``