ocaml-rego: parser & lexer fixes for OPA conformance
- accept future-keyword identifiers in dotted refs so `import
future.keywords.in` and `import rego.v1` parse as ordinary imports.
- add `r=ref_expr op=assign_op v=expr b=rule_body` and the body-less
variant so `p = v { body }` and `p = v` are parsed as complete rules
instead of falling through to RuleDefault.
- introduce `infix_expr_no_in` / `expr_no_in` and a literal-level
`k, v in c` form (plus the parenthesised atom variant) so the
membership `in` operator and its keyed form both parse with the
expected precedence.
- treat the `contains` builtin as an identifier in atom position so
`contains("...", "...")` calls don't collide with the partial-set
`contains` keyword.
- in the lexer, peek past a synthetic SEMICOLON before `else` so
`} else` across a newline doesn't break the rule body's else_chain.