Storage backends can take their config as parameters (again).

The top-level kvlayer.client() entry point still pulls the yakonfig
global configuration, but if you have some other setup, you can pass
the configuration to kvlayer.client(), or bypass the abstraction,
create a storage object, and pass the local configuration to its
constructor directly.

AbstractStorage can take namespace and app_name as parameters, and
these are passed through from kvlayer.client(), so if you need a
client that's exactly like the default client except for its namespace,
you can kvlayer.client(namespace='foo').

AbstractStorage.check_put_key_value() raises, not returns, an exception
(small change while I'm touching every other backend anyways, no
user-visible or API implications).