Fix #83: a reentrancy bug in deferred creation.

Because of the way we were using a mutable Deferred record, and giving access to that to the resolver function, it was possible in certain edge-case scenarios to call the resolver twice, the second time outside of GetDeferred and its IsCallable-checking. This is now fixed, by no longer giving the resolver access to the deferred object directly.