Add basic K2 storage framework implementation.

Due to the size of the commit, I'm submitting the unit tests in a separate request.
I wouldn't classify this particular one as an IOException. Perhaps StoreException? That said, do we want all K2 exceptions to extend K2Exception or should some extend directly from Java's built-in exception classes? (I was thinking the former for consistency.)