add callOnce

- uses double-checked locking (the correct one)

- all instances shared the same global mutex

- minimal overhead and simple API
It's used in atomic operations, therefor requires shared. And shared static variables are unique, not thread-local, just like __gshared.