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.
I'd prefer this to throw an IllegalStateException with a helpful message about initializing the context. Or maybe it should return an immutable empty context. I think the ability to add to the default context should go.