GlobalRenderData contains some global metadata that can be obtained from
any template.
RenderData is a base type for template data. It contains a Global field
with global metadata and an Extra field for plugins.
The session manager has been upgraded to deal with reconnections.
Each session has its own expiration timer. Each time a request is
received, the expiration timer is reset.
A session can be closed (this is used when the user wants to logout).
When the IMAP connection is closed by the server, it's set to nil in the
session. The next time an IMAP command needs to be issued, the
connection is re-established.
Closes: https://todo.sr.ht/~sircmpwn/koushin/30
This makes sure fields filled by vanilla koushin keep the right type. A
new Extra field allows plugins to attach their own data.
This also makes it easier to write Go plugins, which would have trouble
working with interface{}.