A KeyStoreContext is usually limited to a read only access to the global keys,
which allows us to have multiple read only contexts at the same time and do multitheaded
encryption/decryption. We also have the option to create a read/write context, which allows us
to modify the global keys, but only allows one context at a time. This is controlled by a
std::sync::RwLock on the global keys, and this struct stores both types of guards.