Updated ThreadSafeLazy to fail fast when attempting to retrieve its value

We have run into a situation where multiple threads get queued up behind a ThreadSafeLazy, and within its callback a timeout is occurring. 

In the AzureQueueManager when FetchExistingSubscriptions is called, we were seeing a timeout when calling the namespace manager within FetchExistingTopicSubscriptions. 

It looks like the calls backing up on the ThreadSafeLazy in question are ultimately wrapped in a Task.WhenAll(), so we were not seeing the resulting exception thrown during evaluating the lazy until all of the tasks had finished running, and each task would attempt to reevaluate the value, and had to wait for the timeout to occur before the next one could come through.

The changes below bring the ThreadSafeLazy implementation closer to the BCL Lazy implementation, in which if it fails to evaluate its value it will not attempt to reevaluate and fail fast for any other callers.