Introduce IDataContext to consolidate context adaptation.

I defined a new IDataContext as an interface for contexts that provide
the functionality of IListenable, IPersistable, IRestricted, and
ICheckpointable. DataContext and MultiContext are example concrete
implementations.

As a side effect of the change, we have one single adapter from
IContext to IDataContext (and, thus, implicitly to all of its component
interfaces). This drastically reduces the number of possible paths
in the adaptation network.