olm (olm and megolm cryptographic ratchets)

An implementation of the Double Ratchet cryptographic ratchet described
by https://whispersystems.org/docs/specifications/doubleratchet/,
written in C and C++11 and exposed as a C API.

The specification of the Olm ratchet can be found in olm.md.

This library also includes an implementation of the Megolm cryptographic
ratchet, as specified in megolm.md.

Olm is designed to be easy port to different platforms and to be easy to
write bindings for.

It was originally implemented in C++, with a plain-C layer providing the
public API. As development has progressed, it has become clear that C++
gives little advantage, and new functionality is being added in C, with
C++ parts being rewritten as the need arises.
