we have a new explicit `Storage.t` interface, that can be used to get a `Context.t` (a hmap) and to locally swap it; then we have multiple implementations of the Storage; and then we have a singleton atomic containing the "main" storage.