Add eca_node_access submodule: ECA events and actions for hook_node_grants() and hook_node_access_records()
### Problem/Motivation
ECA Access (eca_access) reacts to `hook_ENTITY_TYPE_access`, which governs
direct entity access checks but is **not** consulted by `node_access`-tagged
database queries such as Views listings. As a result, per-node access granted
via ECA Access is invisible to Views: a view that lists those nodes shows
nothing.
Drupal has a second, query-aware access system — the node grants system
(`hook_node_grants()` / `hook_node_access_records()`). To make ECA-driven node
access honored by listings, ECA needs to plug into that system as well.
This is intentionally **nodes-only**: the grants system is a node-specific API
and has no general entity equivalent.
### Proposed resolution
Add a new `eca_node_access` submodule that exposes the node grants system to
ECA through event/action pairs:
- **Event: Node Access — node grants for an account** (`hook_node_grants()`),
optionally restricted by a permission.
Paired action: **Return account node grants** (sets the realm + grant IDs the
account receives).
- **Event: Node Access — record access grants for a node**
(`hook_node_access_records()`), optionally restricted by bundle.
Paired action: **Return node access granting records** (sets realm, grant
IDs, and view/update/delete flags).
This gives full per-account / per-node grant flexibility (realm + gid +
grant_view/update/delete), which `eca_content_access` (via `content_access`)
does not expose.
Rejected (for now): altering `node_access`-tagged queries directly (e.g. via
`hook_query_node_access_alter()`) — performance is poor (large `IN` lists), and
the grants system is the recommended, query-integrated mechanism.
### Remaining tasks
- Port the submodule to the 3.1.x architecture (OOP `#[Hook]` classes;
`BaseHookHandler` no longer exists — see review).
- Fix the blocker-level bugs found in review (uninitialized typed properties,
unreachable code, wrong event interface in `appliesForWildcard()`).
- Add kernel/functional test coverage.
- Resolve phpcs/phpstan findings.
### User interface changes
Two new ECA events and two new ECA actions become available once the
`eca_node_access` submodule is enabled. No changes to existing UI.
### API changes
New submodule only. No changes to existing ECA APIs.
### Data model changes
None in ECA itself; the submodule writes standard `node_access` grant records
via core's node grants system.
issue