EmitC currently models C's `&` and `*` operators via its `apply` op,
which has several drawbacks:
- Its pre-lvalue semantics combines dereferencing with memory access.
- Representing multiple opcodes (selected by an attribute) in a single
op complicates the code by adding a second, attribute-based selection
layer on top of MLIR's standard `isa<>` mechanism.
This patch adds two distinct, lvalue-based ops to model these C operators.
EmitC passes were converted to use the new ops instead of `apply`, which
is now deprecated.