- Add macros to check that pointers are not NULL, to turn a pointer
and length into a slice, to turn a C string into a `CStr`, and to
interpret an OpenPGP fingerprint as a `Fingerprint`.
- Use them.
- Change `rust_str_to_c_str` and `rust_bytes_to_c_str_lossy` to
return a `Result`.
- Return `Error::OutOfMemory` if `malloc` fails instead of undefined
behavior.
- Update the callers to propagate the error when convenient and to
panic explicitly when not.
- Note: Rust panics if a memory allocation fails so we don't go
too far out of the way to propagate memory allocation errors.
- Add a struct, MM, which holds the malloc and free implementation
passed to pgp_init_.
- Pass it to all functions that allocate using malloc or free memory
using free.
- Instead of using the cookie in the Session data structure to point
to the Keystore, point to a struct.
- This makes it possible to have additional state.