Add basic K2 storage framework implementation.

Due to the size of the commit, I'm submitting the unit tests in a separate request.
I'm giving the driver the freedom to transform/normalize the address if necessary. As for why it might be null, it could be that the driver did not implement the method correctly. I think I decided I didn't want to throw another exception here (if the driver returns null for address), since the original address is available and Store can just compensate for it.