:internal: add a lightweight factory for expression nodes