O(1). Scopes a key to the given function
The key cannot escape the function (because of the existential type).

The implementation actually *creates* a key, but because the key cannot escape
the given function f, there is no way to observe that if we run
withKey f twice, that it will get a different key the second time.

As an analogy, think of a random number generator
some random number generator can be split, from one random number generator
we obtain two distinct random number generator that are unrelated.

The KeyT monad gives us access to a name source, this operation allows
us to split the name source. The generated name from both this and
the split off computation have the same scope, but are otherwise underlated.

Notice that the sharing of the same scope is not a problem
because the monad ensures referential transparency.