Moving context state into its own class.

Wrapping the encryption and decryption operations on methods of the
class makes it a bit more obvious on how to use this part of the
library.  Also update tests to take the new interface.
Clean up EVP contexts to prevent memory leaks.
Updating TODO.md