Add ScopePutMatch

This is done to avoid EvalContext to be injected into matching functions.
We keep the match scope separate for now as a global variable.
Remove ScopeAddVariableHash, use EvalContextVariablePut