Makes StatementContext stateless by splitting operations and state

StatementContext previously consisted of operations as well as state. Due
to that fact a full StatementContext instance would have to be created per
statement. Seeing that creation of these StatementContexts was very
expensive a different approach was needed.

Here the StatementContext (now renamed to StatementOperations) is
state-less and all its methods accepts a StatementState object as first
argument. The StatementState instance passed in contains all state needed
for all participating layers underneath StatementOperations.