Deflation and splitting of StatementContext

Makes more use of the sub-interfaces of StatementContext for removing purely-delegating layers in the StatementContext cake.

All implementations of (previously) CompositeStatementContext go with one or more sub-interfaces instead. This will have the benefit of having the cake deflated, i.e. no delegates delegating to pure delegates, but
only delegations between actual implementations.

At the moment this incurs a higher cost when creating the statement context, but much lower when interacting with the context. The next step will probably be to reduce the amount of statement contexts we create.