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 doing so resolves race condition issues without needing a lock.