update Key to be interface instead of concrete class, break out KeyImpl and ResolvedKey for data store providers to use