PLT-411 - Add service context

General-purpose thread-local service context.

This package is a tidied up version of the existing `ServiceContext` and `ComponentMap`. Lots of new Javadoc and tests, but broadly the same concept as before.

The static default will come in useful when we have things like currency pairs where there is only one sensible default.
Is there an existing use case for this? I'm not sure I can think of one.