Resolves deadlock issues by making synchronous objectForKey: methods truly synchronous

Also refactors async objectForKey:block: to use synchronous objectForKey: counterparts. Speed improvements by reducing number of dispatched threads, dropping unnecessary calls, postponing object instantiation.