Also, this should mention that the implementation is not necessarily thread-safe: it is up to the user to protect against concurrent calls to begin() put() and such