Use special domains to allow functions to return enums defined via enum tables
### Feature description

Right now, you can [define enums with enum tables](https://www.graphile.org/postgraphile/enums/#with-enum-tables), which have a number of benefits versus native PostgreSQL enums. 

However, one drawback of enum tables vs native PostgreSQL enums is that you can't return them from functions.

```sql
create table stage_options (
  type text primary key
);

insert into stage_options (type) values ('pending', 'round 1', 'round 2', 'rejected', 'hired');

create table applicants (
  id uuid,
  first_name text,
  last_name text,
  stage text references stage_options (type)
);

create or replace next_stage_options(a applicants) returns text -- no way to make this return stage_options instead of text
as $$
  -- some function definition
$$ language sql;
```

In Discord, Benjie and I discussed using a domain to tell Postgraphile to re-use the enum type:
```sql
create domain stage_options_enum_domain as text;

create or replace next_stage_options(a applicants) returns stage_options_enum_domain
as $$
  -- some function definition
$$ language sql;
```

And linking the domain to the table either
- by naming convention `<enum table name>_enum_domain`
- or by smart comment:
```
comment on domain stage_options_enum_domain is E'@enum stage_options';
```

### Breaking changes

I suppose this could be a breaking change for anyone who:
- is using an enum table
- has a domain that matches the naming specification
- has a function that returns that domain

and is counting on Postgraphile treating that domain as an alias for text, accepting any options, instead of the specific enum options.

I think this is sufficiently unlikely that we shouldn't consider it a breaking change.

### Supporting development

I [tick all that apply]:

<!-- To tick a checkbox, change it from `[ ]` to `[x]` -->

- [x] am interested in building this feature myself
- [x] am interested in collaborating on building this feature
- [x] am willing to help testing this feature before it's released
- [ ] am willing to write a test-driven test suite for this feature (before it exists)
- [x] am a [Graphile sponsor](https://www.graphile.org/sponsor/) ❤️
- [x] have an active [support or consultancy contract](https://www.graphile.org/support/) with Graphile

