RFC: Anonymous enum types called joins, as `A | B`

Add support for defining anonymous, enum-like types using `A | B`.

[Rendered](https://github.com/reem/rfcs/blob/anonymous-enums/text/0000-anonymous-enums.md)
What about matching on the substructure of a type, e.g.

```rust
enum Foo { X(u8), Y(i8) }

match x {
    X(1) => { ... }
    Y(2) => { ... }
    _ => { ... }
}
```

How would this be encoded for `u8 | i8`?