Add SQLite and in-memory key storage drivers

#### Summary of Changes:
* Examples include a SQLite storage driver and a small program demonstrating the user-facing storage API.
 * Updated gradle build files to compile/test example sub-projects.
* Implemented a K2-native in-memory driver.
 * Stores keys in proto message form for the duration of a K2Context.
* Refactored unit tests for storage drivers.
 * Moved all shared testing logic to two super-classes: one for basic testing and another for testing file-based drivers.

The memspace is tied to the context (it is retrieved from a weakhashmap of context -> memspace). So as long as the context is active, the key can be retrieved.

I'm assuming the key should only be stored in memory for the duration of the context, but I can change it so that it is stored for the lifetime of the VM. (Not sure if this is what we want.)