Use dispatch_once instead of checking for NULL for singleton objects

Now that we have GCD, it's better to use dispatch_once to lazy-instantiate singleton objects since doing so resolves race condition issues without needing a lock.

Please refer to commit 71483f8