This adapter class is the container for all context types for internal
use. The AST now uses this class rather than the app-level Context
interface to allow flexibility in the future.
Currently, we have two context interfaces which must be supported :

Context : used for application/template data access

InternalHousekeepingContext : used for internal housekeeping and caching

InternalWrapperContext : used for getting root cache context and other
such.

InternalEventContext : for event handling.

This class implements the two interfaces to ensure that all methods are
supported. When adding to the interfaces, or adding more context
functionality, the interface is the primary definition, so alter that first
and then all classes as necessary. As of this writing, this would be
the only class affected by changes to InternalContext
This class ensures that an InternalContextBase is available for internal
use. If an application constructs their own Context-implementing
object w/o subclassing AbstractContext, it may be that support for
InternalContext is not available. Therefore, InternalContextAdapter will
create an InternalContextBase if necessary for this support. Note that
if this is necessary, internal information such as node-cache data will be
lost from use to use of the context. This may or may not be important,
depending upon application.