Fix main thread deadlock by submitting SBPerformSelectorAsync's reply handler to global concurrent queue in dedicated cases

This problem was introduced by always submitting SBPerformSelectorAsync's reply handler to the main queue.

Also using a semaphore now instead of a loop to wait for receipt of bookmark.