Methods for waiting asynchronously in unit tests

Added `-asynchronousFirstOrDefault:error:success:` and `-asynchronouslyWaitUntilCompleted:`, which "restore" the old behavior of `-first` by spinning the main run loop. However, **these methods are only for unit tests**, and are never safe to use outside of them.