add callOnce

- uses double-checked locking (the correct one)

- all instances shared the same global mutex

- minimal overhead and simple API
Also I think general rule of a thumb is to always try going for `shared` instead of `__gshared` unless there are some transitivity issues that prevent it (like with `Mutex`)