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)
Actually I had not thought this through. My main motivation in saying this was that you can't write an impl for a type or trait you didn't define, but with the new rules only one of the types in the union has to be yours. We could use exactly the same rules as with tuples.