Add exception to throw for null Context references

This new exception type will be used in a forthcoming
Contextual#context() method, which ensures that either
the Context is null, or throws an exception.
DefaultStatusServiceTest: use abstract base class

Better to extend the abstract base class, rather than implement in
the interface directly, in case the additional methods are added.
Contextual: add non-null context accessor

The new context() method behaves like getContext(), except that if the
context is null, it throws a NullContextException (unchecked type).

The rationale is that it is extremely common to chain method calls like
"myObject.getContext().getService..." or similar. But if getContext()
returns null, that invocation throws NullPointerException. We would like
a slightly more informative exception to be thrown in that case.
Context: clean up style
Context: check class type before casting
Context: clarify javadoc
Context: use ClassUtils#loadClass helper method
Context: add methods to obtain non-null services

These new service(*) methods behave like getService(*) except that if
a service is not found, an exception is thrown.
AbstractGateway: use new Context#service methods

The null checking logic of AbstractGateway is now obsolete,
since it is done in the Context itself by the service(*) methods.
Gateway: tweak javadoc
Use new Contextual#context() method as appropriate

In particular, rather than calling getContext().someMethod(), it is
nearly always preferable to write context().someMethod() instead. The
latter is not only more succinct and hence easier to read, but also
throws a dedicated NullContextException rather than the vague and
intimidating NullPointerException.
NullContextException: give helpful default message

Well, maybe not "helpful" per se, but better than nothing.
Merge branch 'context-null-checking'

This branch adds convenience methods that perform more stringent null
checking:

* Context now has service(...) methods which throw
  NoSuchServiceException if the service is not present.
* Contextual now has a context() method which throws
  NullContextException if the context has not been set.

And relevant areas of the codebase have been updated to take advantage
of these new methods, as appropriate.