Implementing cache key scoping.

This allows to provide a `scope` on a per adapter
configuration basis. Namespacing/scoping of the keys
is then handled by the adapters transparently.

When multiple apps access the same cache store, scoping
can be used to prevent accidental overwriting of keys.

- Removing unused cache prefix option.
- Adding scoping docs to cache class.
- Adding helper methods to base adapter.
- Adding tests.